__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 *  Copyright 2003-2005 Red Hat, Inc.  All rights reserved.
 *  Copyright 2003-2005 Jeff Garzik
 *
 *  libata documentation is available via 'make {ps|pdf}docs',
 *  as Documentation/driver-api/libata.rst
 */

#ifndef __LINUX_LIBATA_H__
#define __LINUX_LIBATA_H__

#include <linux/delay.h>
#include <linux/jiffies.h>
#include <linux/interrupt.h>
#include <linux/dma-mapping.h>
#include <linux/scatterlist.h>
#include <linux/io.h>
#include <linux/ata.h>
#include <linux/workqueue.h>
#include <scsi/scsi_host.h>
#include <linux/acpi.h>
#include <linux/cdrom.h>
#include <linux/sched.h>
#include <linux/async.h>

/*
 * Define if arch has non-standard setup.  This is a _PCI_ standard
 * not a legacy or ISA standard.
 */
#ifdef CONFIG_ATA_NONSTANDARD
#include <asm/libata-portmap.h>
#else
#define ATA_PRIMARY_IRQ(dev)	14
#define ATA_SECONDARY_IRQ(dev)	15
#endif

/*
 * compile-time options: to be removed as soon as all the drivers are
 * converted to the new debugging mechanism
 */
#undef ATA_IRQ_TRAP		/* define to ack screaming irqs */


#define ata_print_version_once(dev, version)			\
({								\
	static bool __print_once;				\
								\
	if (!__print_once) {					\
		__print_once = true;				\
		ata_print_version(dev, version);		\
	}							\
})

/* defines only for the constants which don't work well as enums */
#define ATA_TAG_POISON		0xfafbfcfdU

/*
 * Quirk flags bits.
 * ata_device->quirks is an unsigned int, so __ATA_QUIRK_MAX must not exceed 32.
 */
enum ata_quirks {
	__ATA_QUIRK_DIAGNOSTIC,		/* Failed boot diag */
	__ATA_QUIRK_NODMA,		/* DMA problems */
	__ATA_QUIRK_NONCQ,		/* Don't use NCQ */
	__ATA_QUIRK_MAX_SEC_128,	/* Limit max sects to 128 */
	__ATA_QUIRK_BROKEN_HPA,		/* Broken HPA */
	__ATA_QUIRK_DISABLE,		/* Disable it */
	__ATA_QUIRK_HPA_SIZE,		/* Native size off by one */
	__ATA_QUIRK_IVB,		/* cbl det validity bit bugs */
	__ATA_QUIRK_STUCK_ERR,		/* Stuck ERR on next PACKET */
	__ATA_QUIRK_BRIDGE_OK,		/* No bridge limits */
	__ATA_QUIRK_ATAPI_MOD16_DMA,	/* Use ATAPI DMA for commands that */
					/* are not a multiple of 16 bytes */
	__ATA_QUIRK_FIRMWARE_WARN,	/* Firmware update warning */
	__ATA_QUIRK_1_5_GBPS,		/* Force 1.5 Gbps */
	__ATA_QUIRK_NOSETXFER,		/* Skip SETXFER, SATA only */
	__ATA_QUIRK_BROKEN_FPDMA_AA,	/* Skip AA */
	__ATA_QUIRK_DUMP_ID,		/* Dump IDENTIFY data */
	__ATA_QUIRK_MAX_SEC_LBA48,	/* Set max sects to 65535 */
	__ATA_QUIRK_ATAPI_DMADIR,	/* Device requires dmadir */
	__ATA_QUIRK_NO_NCQ_TRIM,	/* Do not use queued TRIM */
	__ATA_QUIRK_NOLPM,		/* Do not use LPM */
	__ATA_QUIRK_WD_BROKEN_LPM,	/* Some WDs have broken LPM */
	__ATA_QUIRK_ZERO_AFTER_TRIM,	/* Guarantees zero after trim */
	__ATA_QUIRK_NO_DMA_LOG,		/* Do not use DMA for log read */
	__ATA_QUIRK_NOTRIM,		/* Do not use TRIM */
	__ATA_QUIRK_MAX_SEC_1024,	/* Limit max sects to 1024 */
	__ATA_QUIRK_MAX_TRIM_128M,	/* Limit max trim size to 128M */
	__ATA_QUIRK_NO_NCQ_ON_ATI,	/* Disable NCQ on ATI chipset */
	__ATA_QUIRK_NO_LPM_ON_ATI,	/* Disable LPM on ATI chipset */
	__ATA_QUIRK_NO_ID_DEV_LOG,	/* Identify device log missing */
	__ATA_QUIRK_NO_LOG_DIR,		/* Do not read log directory */
	__ATA_QUIRK_NO_FUA,		/* Do not use FUA */

	__ATA_QUIRK_MAX,
};

enum {
	/* various global constants */
	LIBATA_MAX_PRD		= ATA_MAX_PRD / 2,
	LIBATA_DUMB_MAX_PRD	= ATA_MAX_PRD / 4,	/* Worst case */
	ATA_DEF_QUEUE		= 1,
	ATA_MAX_QUEUE		= 32,
	ATA_TAG_INTERNAL	= ATA_MAX_QUEUE,
	ATA_SHORT_PAUSE		= 16,

	ATAPI_MAX_DRAIN		= 16 << 10,

	ATA_ALL_DEVICES		= (1 << ATA_MAX_DEVICES) - 1,

	ATA_SHT_EMULATED	= 1,
	ATA_SHT_THIS_ID		= -1,

	/* struct ata_taskfile flags */
	ATA_TFLAG_LBA48		= (1 << 0), /* enable 48-bit LBA and "HOB" */
	ATA_TFLAG_ISADDR	= (1 << 1), /* enable r/w to nsect/lba regs */
	ATA_TFLAG_DEVICE	= (1 << 2), /* enable r/w to device reg */
	ATA_TFLAG_WRITE		= (1 << 3), /* data dir: host->dev==1 (write) */
	ATA_TFLAG_LBA		= (1 << 4), /* enable LBA */
	ATA_TFLAG_FUA		= (1 << 5), /* enable FUA */
	ATA_TFLAG_POLLING	= (1 << 6), /* set nIEN to 1 and use polling */

	/* struct ata_device stuff */
	ATA_DFLAG_LBA		= (1 << 0), /* device supports LBA */
	ATA_DFLAG_LBA48		= (1 << 1), /* device supports LBA48 */
	ATA_DFLAG_CDB_INTR	= (1 << 2), /* device asserts INTRQ when ready for CDB */
	ATA_DFLAG_NCQ		= (1 << 3), /* device supports NCQ */
	ATA_DFLAG_FLUSH_EXT	= (1 << 4), /* do FLUSH_EXT instead of FLUSH */
	ATA_DFLAG_ACPI_PENDING	= (1 << 5), /* ACPI resume action pending */
	ATA_DFLAG_ACPI_FAILED	= (1 << 6), /* ACPI on devcfg has failed */
	ATA_DFLAG_AN		= (1 << 7), /* AN configured */
	ATA_DFLAG_TRUSTED	= (1 << 8), /* device supports trusted send/recv */
	ATA_DFLAG_FUA		= (1 << 9), /* device supports FUA */
	ATA_DFLAG_DMADIR	= (1 << 10), /* device requires DMADIR */
	ATA_DFLAG_NCQ_SEND_RECV = (1 << 11), /* device supports NCQ SEND and RECV */
	ATA_DFLAG_NCQ_PRIO	= (1 << 12), /* device supports NCQ priority */
	ATA_DFLAG_CDL		= (1 << 13), /* supports cmd duration limits */
	ATA_DFLAG_CFG_MASK	= (1 << 14) - 1,

	ATA_DFLAG_PIO		= (1 << 14), /* device limited to PIO mode */
	ATA_DFLAG_NCQ_OFF	= (1 << 15), /* device limited to non-NCQ mode */
	ATA_DFLAG_SLEEPING	= (1 << 16), /* device is sleeping */
	ATA_DFLAG_DUBIOUS_XFER	= (1 << 17), /* data transfer not verified */
	ATA_DFLAG_NO_UNLOAD	= (1 << 18), /* device doesn't support unload */
	ATA_DFLAG_UNLOCK_HPA	= (1 << 19), /* unlock HPA */
	ATA_DFLAG_INIT_MASK	= (1 << 20) - 1,

	ATA_DFLAG_NCQ_PRIO_ENABLED = (1 << 20), /* Priority cmds sent to dev */
	ATA_DFLAG_CDL_ENABLED	= (1 << 21), /* cmd duration limits is enabled */
	ATA_DFLAG_RESUMING	= (1 << 22),  /* Device is resuming */
	ATA_DFLAG_DETACH	= (1 << 24),
	ATA_DFLAG_DETACHED	= (1 << 25),
	ATA_DFLAG_DA		= (1 << 26), /* device supports Device Attention */
	ATA_DFLAG_DEVSLP	= (1 << 27), /* device supports Device Sleep */
	ATA_DFLAG_ACPI_DISABLED = (1 << 28), /* ACPI for the device is disabled */
	ATA_DFLAG_D_SENSE	= (1 << 29), /* Descriptor sense requested */
	ATA_DFLAG_ZAC		= (1 << 30), /* ZAC device */

	ATA_DFLAG_FEATURES_MASK	= (ATA_DFLAG_TRUSTED | ATA_DFLAG_DA |	\
				   ATA_DFLAG_DEVSLP | ATA_DFLAG_NCQ_SEND_RECV | \
				   ATA_DFLAG_NCQ_PRIO | ATA_DFLAG_FUA | \
				   ATA_DFLAG_CDL),

	ATA_DEV_UNKNOWN		= 0,	/* unknown device */
	ATA_DEV_ATA		= 1,	/* ATA device */
	ATA_DEV_ATA_UNSUP	= 2,	/* ATA device (unsupported) */
	ATA_DEV_ATAPI		= 3,	/* ATAPI device */
	ATA_DEV_ATAPI_UNSUP	= 4,	/* ATAPI device (unsupported) */
	ATA_DEV_PMP		= 5,	/* SATA port multiplier */
	ATA_DEV_PMP_UNSUP	= 6,	/* SATA port multiplier (unsupported) */
	ATA_DEV_SEMB		= 7,	/* SEMB */
	ATA_DEV_SEMB_UNSUP	= 8,	/* SEMB (unsupported) */
	ATA_DEV_ZAC		= 9,	/* ZAC device */
	ATA_DEV_ZAC_UNSUP	= 10,	/* ZAC device (unsupported) */
	ATA_DEV_NONE		= 11,	/* no device */

	/* struct ata_link flags */
	/* NOTE: struct ata_force_param currently stores lflags in u16 */
	ATA_LFLAG_NO_HRST	= (1 << 1), /* avoid hardreset */
	ATA_LFLAG_NO_SRST	= (1 << 2), /* avoid softreset */
	ATA_LFLAG_ASSUME_ATA	= (1 << 3), /* assume ATA class */
	ATA_LFLAG_ASSUME_SEMB	= (1 << 4), /* assume SEMB class */
	ATA_LFLAG_ASSUME_CLASS	= ATA_LFLAG_ASSUME_ATA | ATA_LFLAG_ASSUME_SEMB,
	ATA_LFLAG_NO_RETRY	= (1 << 5), /* don't retry this link */
	ATA_LFLAG_DISABLED	= (1 << 6), /* link is disabled */
	ATA_LFLAG_SW_ACTIVITY	= (1 << 7), /* keep activity stats */
	ATA_LFLAG_NO_LPM	= (1 << 8), /* disable LPM on this link */
	ATA_LFLAG_RST_ONCE	= (1 << 9), /* limit recovery to one reset */
	ATA_LFLAG_CHANGED	= (1 << 10), /* LPM state changed on this link */
	ATA_LFLAG_NO_DEBOUNCE_DELAY = (1 << 11), /* no debounce delay on link resume */

	/* struct ata_port flags */
	ATA_FLAG_SLAVE_POSS	= (1 << 0), /* host supports slave dev */
					    /* (doesn't imply presence) */
	ATA_FLAG_SATA		= (1 << 1),
	ATA_FLAG_NO_LPM		= (1 << 2), /* host not happy with LPM */
	ATA_FLAG_NO_LOG_PAGE	= (1 << 5), /* do not issue log page read */
	ATA_FLAG_NO_ATAPI	= (1 << 6), /* No ATAPI support */
	ATA_FLAG_PIO_DMA	= (1 << 7), /* PIO cmds via DMA */
	ATA_FLAG_PIO_LBA48	= (1 << 8), /* Host DMA engine is LBA28 only */
	ATA_FLAG_PIO_POLLING	= (1 << 9), /* use polling PIO if LLD
					     * doesn't handle PIO interrupts */
	ATA_FLAG_NCQ		= (1 << 10), /* host supports NCQ */
	ATA_FLAG_NO_POWEROFF_SPINDOWN = (1 << 11), /* don't spindown before poweroff */
	ATA_FLAG_NO_HIBERNATE_SPINDOWN = (1 << 12), /* don't spindown before hibernation */
	ATA_FLAG_DEBUGMSG	= (1 << 13),
	ATA_FLAG_FPDMA_AA		= (1 << 14), /* driver supports Auto-Activate */
	ATA_FLAG_IGN_SIMPLEX	= (1 << 15), /* ignore SIMPLEX */
	ATA_FLAG_NO_IORDY	= (1 << 16), /* controller lacks iordy */
	ATA_FLAG_ACPI_SATA	= (1 << 17), /* need native SATA ACPI layout */
	ATA_FLAG_AN		= (1 << 18), /* controller supports AN */
	ATA_FLAG_PMP		= (1 << 19), /* controller supports PMP */
	ATA_FLAG_FPDMA_AUX	= (1 << 20), /* controller supports H2DFIS aux field */
	ATA_FLAG_EM		= (1 << 21), /* driver supports enclosure
					      * management */
	ATA_FLAG_SW_ACTIVITY	= (1 << 22), /* driver supports sw activity
					      * led */
	ATA_FLAG_NO_DIPM	= (1 << 23), /* host not happy with DIPM */
	ATA_FLAG_SAS_HOST	= (1 << 24), /* SAS host */

	/* bits 24:31 of ap->flags are reserved for LLD specific flags */


	/* struct ata_port pflags */
	ATA_PFLAG_EH_PENDING	= (1 << 0), /* EH pending */
	ATA_PFLAG_EH_IN_PROGRESS = (1 << 1), /* EH in progress */
	ATA_PFLAG_FROZEN	= (1 << 2), /* port is frozen */
	ATA_PFLAG_RECOVERED	= (1 << 3), /* recovery action performed */
	ATA_PFLAG_LOADING	= (1 << 4), /* boot/loading probe */
	ATA_PFLAG_SCSI_HOTPLUG	= (1 << 6), /* SCSI hotplug scheduled */
	ATA_PFLAG_INITIALIZING	= (1 << 7), /* being initialized, don't touch */
	ATA_PFLAG_RESETTING	= (1 << 8), /* reset in progress */
	ATA_PFLAG_UNLOADING	= (1 << 9), /* driver is being unloaded */
	ATA_PFLAG_UNLOADED	= (1 << 10), /* driver is unloaded */

	ATA_PFLAG_RESUMING	= (1 << 16),  /* port is being resumed */
	ATA_PFLAG_SUSPENDED	= (1 << 17), /* port is suspended (power) */
	ATA_PFLAG_PM_PENDING	= (1 << 18), /* PM operation pending */
	ATA_PFLAG_INIT_GTM_VALID = (1 << 19), /* initial gtm data valid */

	ATA_PFLAG_PIO32		= (1 << 20),  /* 32bit PIO */
	ATA_PFLAG_PIO32CHANGE	= (1 << 21),  /* 32bit PIO can be turned on/off */
	ATA_PFLAG_EXTERNAL	= (1 << 22),  /* eSATA/external port */

	/* struct ata_queued_cmd flags */
	ATA_QCFLAG_ACTIVE	= (1 << 0), /* cmd not yet ack'd to scsi lyer */
	ATA_QCFLAG_DMAMAP	= (1 << 1), /* SG table is DMA mapped */
	ATA_QCFLAG_RTF_FILLED	= (1 << 2), /* result TF has been filled */
	ATA_QCFLAG_IO		= (1 << 3), /* standard IO command */
	ATA_QCFLAG_RESULT_TF	= (1 << 4), /* result TF requested */
	ATA_QCFLAG_CLEAR_EXCL	= (1 << 5), /* clear excl_link on completion */
	ATA_QCFLAG_QUIET	= (1 << 6), /* don't report device error */
	ATA_QCFLAG_RETRY	= (1 << 7), /* retry after failure */
	ATA_QCFLAG_HAS_CDL	= (1 << 8), /* qc has CDL a descriptor set */

	ATA_QCFLAG_EH		= (1 << 16), /* cmd aborted and owned by EH */
	ATA_QCFLAG_SENSE_VALID	= (1 << 17), /* sense data valid */
	ATA_QCFLAG_EH_SCHEDULED = (1 << 18), /* EH scheduled (obsolete) */
	ATA_QCFLAG_EH_SUCCESS_CMD = (1 << 19), /* EH should fetch sense for this successful cmd */

	/* host set flags */
	ATA_HOST_SIMPLEX	= (1 << 0),	/* Host is simplex, one DMA channel per host only */
	ATA_HOST_STARTED	= (1 << 1),	/* Host started */
	ATA_HOST_PARALLEL_SCAN	= (1 << 2),	/* Ports on this host can be scanned in parallel */
	ATA_HOST_IGNORE_ATA	= (1 << 3),	/* Ignore ATA devices on this host. */

	ATA_HOST_NO_PART	= (1 << 4), /* Host does not support partial */
	ATA_HOST_NO_SSC		= (1 << 5), /* Host does not support slumber */
	ATA_HOST_NO_DEVSLP	= (1 << 6), /* Host does not support devslp */

	/* bits 24:31 of host->flags are reserved for LLD specific flags */

	/* Various lengths of time */
	ATA_TMOUT_INTERNAL_QUICK = 5000,
	ATA_TMOUT_MAX_PARK	= 30000,

	/*
	 * GoVault needs 2s and iVDR disk HHD424020F7SV00 800ms.  2s
	 * is too much without parallel probing.  Use 2s if parallel
	 * probing is available, 800ms otherwise.
	 */
	ATA_TMOUT_FF_WAIT_LONG	=  2000,
	ATA_TMOUT_FF_WAIT	=   800,

	/* Spec mandates to wait for ">= 2ms" before checking status
	 * after reset.  We wait 150ms, because that was the magic
	 * delay used for ATAPI devices in Hale Landis's ATADRVR, for
	 * the period of time between when the ATA command register is
	 * written, and then status is checked.  Because waiting for
	 * "a while" before checking status is fine, post SRST, we
	 * perform this magic delay here as well.
	 *
	 * Old drivers/ide uses the 2mS rule and then waits for ready.
	 */
	ATA_WAIT_AFTER_RESET	=  150,

	/* If PMP is supported, we have to do follow-up SRST.  As some
	 * PMPs don't send D2H Reg FIS after hardreset, LLDs are
	 * advised to wait only for the following duration before
	 * doing SRST.
	 */
	ATA_TMOUT_PMP_SRST_WAIT	= 10000,

	/* When the LPM policy is set to ATA_LPM_MAX_POWER, there might
	 * be a spurious PHY event, so ignore the first PHY event that
	 * occurs within 10s after the policy change.
	 */
	ATA_TMOUT_SPURIOUS_PHY	= 10000,

	/* ATA bus states */
	BUS_UNKNOWN		= 0,
	BUS_DMA			= 1,
	BUS_IDLE		= 2,
	BUS_NOINTR		= 3,
	BUS_NODATA		= 4,
	BUS_TIMER		= 5,
	BUS_PIO			= 6,
	BUS_EDD			= 7,
	BUS_IDENTIFY		= 8,
	BUS_PACKET		= 9,

	/* SATA port states */
	PORT_UNKNOWN		= 0,
	PORT_ENABLED		= 1,
	PORT_DISABLED		= 2,

	/* encoding various smaller bitmaps into a single
	 * unsigned int bitmap
	 */
	ATA_NR_PIO_MODES	= 7,
	ATA_NR_MWDMA_MODES	= 5,
	ATA_NR_UDMA_MODES	= 8,

	ATA_SHIFT_PIO		= 0,
	ATA_SHIFT_MWDMA		= ATA_SHIFT_PIO + ATA_NR_PIO_MODES,
	ATA_SHIFT_UDMA		= ATA_SHIFT_MWDMA + ATA_NR_MWDMA_MODES,
	ATA_SHIFT_PRIO		= 6,

	ATA_PRIO_HIGH		= 2,
	/* size of buffer to pad xfers ending on unaligned boundaries */
	ATA_DMA_PAD_SZ		= 4,

	/* ering size */
	ATA_ERING_SIZE		= 32,

	/* return values for ->qc_defer */
	ATA_DEFER_LINK		= 1,
	ATA_DEFER_PORT		= 2,

	/* desc_len for ata_eh_info and context */
	ATA_EH_DESC_LEN		= 80,

	/* reset / recovery action types */
	ATA_EH_REVALIDATE	= (1 << 0),
	ATA_EH_SOFTRESET	= (1 << 1), /* meaningful only in ->prereset */
	ATA_EH_HARDRESET	= (1 << 2), /* meaningful only in ->prereset */
	ATA_EH_RESET		= ATA_EH_SOFTRESET | ATA_EH_HARDRESET,
	ATA_EH_ENABLE_LINK	= (1 << 3),
	ATA_EH_PARK		= (1 << 5), /* unload heads and stop I/O */
	ATA_EH_GET_SUCCESS_SENSE = (1 << 6), /* Get sense data for successful cmd */
	ATA_EH_SET_ACTIVE	= (1 << 7), /* Set a device to active power mode */

	ATA_EH_PERDEV_MASK	= ATA_EH_REVALIDATE | ATA_EH_PARK |
				  ATA_EH_GET_SUCCESS_SENSE | ATA_EH_SET_ACTIVE,
	ATA_EH_ALL_ACTIONS	= ATA_EH_REVALIDATE | ATA_EH_RESET |
				  ATA_EH_ENABLE_LINK,

	/* ata_eh_info->flags */
	ATA_EHI_HOTPLUGGED	= (1 << 0),  /* could have been hotplugged */
	ATA_EHI_NO_AUTOPSY	= (1 << 2),  /* no autopsy */
	ATA_EHI_QUIET		= (1 << 3),  /* be quiet */
	ATA_EHI_NO_RECOVERY	= (1 << 4),  /* no recovery */

	ATA_EHI_DID_SOFTRESET	= (1 << 16), /* already soft-reset this port */
	ATA_EHI_DID_HARDRESET	= (1 << 17), /* already soft-reset this port */
	ATA_EHI_PRINTINFO	= (1 << 18), /* print configuration info */
	ATA_EHI_SETMODE		= (1 << 19), /* configure transfer mode */
	ATA_EHI_POST_SETMODE	= (1 << 20), /* revalidating after setmode */
	ATA_EHI_DID_PRINT_QUIRKS = (1 << 21), /* already printed quirks info */

	ATA_EHI_DID_RESET	= ATA_EHI_DID_SOFTRESET | ATA_EHI_DID_HARDRESET,

	/* mask of flags to transfer *to* the slave link */
	ATA_EHI_TO_SLAVE_MASK	= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET,

	/* max tries if error condition is still set after ->error_handler */
	ATA_EH_MAX_TRIES	= 5,

	/* sometimes resuming a link requires several retries */
	ATA_LINK_RESUME_TRIES	= 5,

	/* how hard are we gonna try to probe/recover devices */
	ATA_EH_DEV_TRIES	= 3,
	ATA_EH_PMP_TRIES	= 5,
	ATA_EH_PMP_LINK_TRIES	= 3,

	SATA_PMP_RW_TIMEOUT	= 3000,		/* PMP read/write timeout */

	/* This should match the actual table size of
	 * ata_eh_cmd_timeout_table in libata-eh.c.
	 */
	ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 8,

	/*
	 * Quirk flags: may be set by libata or controller drivers on drives.
	 * Some quirks may be drive/controller pair dependent.
	 */
	ATA_QUIRK_DIAGNOSTIC		= (1U << __ATA_QUIRK_DIAGNOSTIC),
	ATA_QUIRK_NODMA			= (1U << __ATA_QUIRK_NODMA),
	ATA_QUIRK_NONCQ			= (1U << __ATA_QUIRK_NONCQ),
	ATA_QUIRK_MAX_SEC_128		= (1U << __ATA_QUIRK_MAX_SEC_128),
	ATA_QUIRK_BROKEN_HPA		= (1U << __ATA_QUIRK_BROKEN_HPA),
	ATA_QUIRK_DISABLE		= (1U << __ATA_QUIRK_DISABLE),
	ATA_QUIRK_HPA_SIZE		= (1U << __ATA_QUIRK_HPA_SIZE),
	ATA_QUIRK_IVB			= (1U << __ATA_QUIRK_IVB),
	ATA_QUIRK_STUCK_ERR		= (1U << __ATA_QUIRK_STUCK_ERR),
	ATA_QUIRK_BRIDGE_OK		= (1U << __ATA_QUIRK_BRIDGE_OK),
	ATA_QUIRK_ATAPI_MOD16_DMA	= (1U << __ATA_QUIRK_ATAPI_MOD16_DMA),
	ATA_QUIRK_FIRMWARE_WARN		= (1U << __ATA_QUIRK_FIRMWARE_WARN),
	ATA_QUIRK_1_5_GBPS		= (1U << __ATA_QUIRK_1_5_GBPS),
	ATA_QUIRK_NOSETXFER		= (1U << __ATA_QUIRK_NOSETXFER),
	ATA_QUIRK_BROKEN_FPDMA_AA	= (1U << __ATA_QUIRK_BROKEN_FPDMA_AA),
	ATA_QUIRK_DUMP_ID		= (1U << __ATA_QUIRK_DUMP_ID),
	ATA_QUIRK_MAX_SEC_LBA48		= (1U << __ATA_QUIRK_MAX_SEC_LBA48),
	ATA_QUIRK_ATAPI_DMADIR		= (1U << __ATA_QUIRK_ATAPI_DMADIR),
	ATA_QUIRK_NO_NCQ_TRIM		= (1U << __ATA_QUIRK_NO_NCQ_TRIM),
	ATA_QUIRK_NOLPM			= (1U << __ATA_QUIRK_NOLPM),
	ATA_QUIRK_WD_BROKEN_LPM		= (1U << __ATA_QUIRK_WD_BROKEN_LPM),
	ATA_QUIRK_ZERO_AFTER_TRIM	= (1U << __ATA_QUIRK_ZERO_AFTER_TRIM),
	ATA_QUIRK_NO_DMA_LOG		= (1U << __ATA_QUIRK_NO_DMA_LOG),
	ATA_QUIRK_NOTRIM		= (1U << __ATA_QUIRK_NOTRIM),
	ATA_QUIRK_MAX_SEC_1024		= (1U << __ATA_QUIRK_MAX_SEC_1024),
	ATA_QUIRK_MAX_TRIM_128M		= (1U << __ATA_QUIRK_MAX_TRIM_128M),
	ATA_QUIRK_NO_NCQ_ON_ATI		= (1U << __ATA_QUIRK_NO_NCQ_ON_ATI),
	ATA_QUIRK_NO_LPM_ON_ATI		= (1U << __ATA_QUIRK_NO_LPM_ON_ATI),
	ATA_QUIRK_NO_ID_DEV_LOG		= (1U << __ATA_QUIRK_NO_ID_DEV_LOG),
	ATA_QUIRK_NO_LOG_DIR		= (1U << __ATA_QUIRK_NO_LOG_DIR),
	ATA_QUIRK_NO_FUA		= (1U << __ATA_QUIRK_NO_FUA),

	/* User visible DMA mask for DMA control. DO NOT renumber. */
	ATA_DMA_MASK_ATA	= (1 << 0),	/* DMA on ATA Disk */
	ATA_DMA_MASK_ATAPI	= (1 << 1),	/* DMA on ATAPI */
	ATA_DMA_MASK_CFA	= (1 << 2),	/* DMA on CF Card */

	/* ATAPI command types */
	ATAPI_READ		= 0,		/* READs */
	ATAPI_WRITE		= 1,		/* WRITEs */
	ATAPI_READ_CD		= 2,		/* READ CD [MSF] */
	ATAPI_PASS_THRU		= 3,		/* SAT pass-thru */
	ATAPI_MISC		= 4,		/* the rest */

	/* Timing constants */
	ATA_TIMING_SETUP	= (1 << 0),
	ATA_TIMING_ACT8B	= (1 << 1),
	ATA_TIMING_REC8B	= (1 << 2),
	ATA_TIMING_CYC8B	= (1 << 3),
	ATA_TIMING_8BIT		= ATA_TIMING_ACT8B | ATA_TIMING_REC8B |
				  ATA_TIMING_CYC8B,
	ATA_TIMING_ACTIVE	= (1 << 4),
	ATA_TIMING_RECOVER	= (1 << 5),
	ATA_TIMING_DMACK_HOLD	= (1 << 6),
	ATA_TIMING_CYCLE	= (1 << 7),
	ATA_TIMING_UDMA		= (1 << 8),
	ATA_TIMING_ALL		= ATA_TIMING_SETUP | ATA_TIMING_ACT8B |
				  ATA_TIMING_REC8B | ATA_TIMING_CYC8B |
				  ATA_TIMING_ACTIVE | ATA_TIMING_RECOVER |
				  ATA_TIMING_DMACK_HOLD | ATA_TIMING_CYCLE |
				  ATA_TIMING_UDMA,

	/* ACPI constants */
	ATA_ACPI_FILTER_SETXFER	= 1 << 0,
	ATA_ACPI_FILTER_LOCK	= 1 << 1,
	ATA_ACPI_FILTER_DIPM	= 1 << 2,
	ATA_ACPI_FILTER_FPDMA_OFFSET = 1 << 3,	/* FPDMA non-zero offset */
	ATA_ACPI_FILTER_FPDMA_AA = 1 << 4,	/* FPDMA auto activate */

	ATA_ACPI_FILTER_DEFAULT	= ATA_ACPI_FILTER_SETXFER |
				  ATA_ACPI_FILTER_LOCK |
				  ATA_ACPI_FILTER_DIPM,
};

enum ata_xfer_mask {
	ATA_MASK_PIO		= ((1U << ATA_NR_PIO_MODES) - 1) << ATA_SHIFT_PIO,
	ATA_MASK_MWDMA		= ((1U << ATA_NR_MWDMA_MODES) - 1) << ATA_SHIFT_MWDMA,
	ATA_MASK_UDMA		= ((1U << ATA_NR_UDMA_MODES) - 1) << ATA_SHIFT_UDMA,
};

enum hsm_task_states {
	HSM_ST_IDLE,		/* no command on going */
	HSM_ST_FIRST,		/* (waiting the device to)
				   write CDB or first data block */
	HSM_ST,			/* (waiting the device to) transfer data */
	HSM_ST_LAST,		/* (waiting the device to) complete command */
	HSM_ST_ERR,		/* error */
};

enum ata_completion_errors {
	AC_ERR_OK		= 0,	    /* no error */
	AC_ERR_DEV		= (1 << 0), /* device reported error */
	AC_ERR_HSM		= (1 << 1), /* host state machine violation */
	AC_ERR_TIMEOUT		= (1 << 2), /* timeout */
	AC_ERR_MEDIA		= (1 << 3), /* media error */
	AC_ERR_ATA_BUS		= (1 << 4), /* ATA bus error */
	AC_ERR_HOST_BUS		= (1 << 5), /* host bus error */
	AC_ERR_SYSTEM		= (1 << 6), /* system error */
	AC_ERR_INVALID		= (1 << 7), /* invalid argument */
	AC_ERR_OTHER		= (1 << 8), /* unknown */
	AC_ERR_NODEV_HINT	= (1 << 9), /* polling device detection hint */
	AC_ERR_NCQ		= (1 << 10), /* marker for offending NCQ qc */
};

/*
 * Link power management policy: If you alter this, you also need to
 * alter libata-sata.c (for the ascii descriptions)
 */
enum ata_lpm_policy {
	ATA_LPM_UNKNOWN,
	ATA_LPM_MAX_POWER,
	ATA_LPM_MED_POWER,
	ATA_LPM_MED_POWER_WITH_DIPM, /* Med power + DIPM as win IRST does */
	ATA_LPM_MIN_POWER_WITH_PARTIAL, /* Min Power + partial and slumber */
	ATA_LPM_MIN_POWER, /* Min power + no partial (slumber only) */
};

enum ata_lpm_hints {
	ATA_LPM_EMPTY		= (1 << 0), /* port empty/probing */
	ATA_LPM_HIPM		= (1 << 1), /* may use HIPM */
	ATA_LPM_WAKE_ONLY	= (1 << 2), /* only wake up link */
};

/* forward declarations */
struct scsi_device;
struct ata_port_operations;
struct ata_port;
struct ata_link;
struct ata_queued_cmd;

/* typedefs */
typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc);
typedef int (*ata_prereset_fn_t)(struct ata_link *link, unsigned long deadline);
typedef int (*ata_reset_fn_t)(struct ata_link *link, unsigned int *classes,
			      unsigned long deadline);
typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes);

extern struct device_attribute dev_attr_unload_heads;
#ifdef CONFIG_SATA_HOST
extern struct device_attribute dev_attr_link_power_management_policy;
extern struct device_attribute dev_attr_ncq_prio_supported;
extern struct device_attribute dev_attr_ncq_prio_enable;
extern struct device_attribute dev_attr_em_message_type;
extern struct device_attribute dev_attr_em_message;
extern struct device_attribute dev_attr_sw_activity;
#endif

enum sw_activity {
	OFF,
	BLINK_ON,
	BLINK_OFF,
};

struct ata_taskfile {
	unsigned long		flags;		/* ATA_TFLAG_xxx */
	u8			protocol;	/* ATA_PROT_xxx */

	u8			ctl;		/* control reg */

	u8			hob_feature;	/* additional data */
	u8			hob_nsect;	/* to support LBA48 */
	u8			hob_lbal;
	u8			hob_lbam;
	u8			hob_lbah;

	union {
		u8		error;
		u8		feature;
	};
	u8			nsect;
	u8			lbal;
	u8			lbam;
	u8			lbah;

	u8			device;

	union {
		u8		status;
		u8		command;
	};

	u32			auxiliary;	/* auxiliary field */
						/* from SATA 3.1 and */
						/* ATA-8 ACS-3 */
};

#ifdef CONFIG_ATA_SFF
struct ata_ioports {
	void __iomem		*cmd_addr;
	void __iomem		*data_addr;
	void __iomem		*error_addr;
	void __iomem		*feature_addr;
	void __iomem		*nsect_addr;
	void __iomem		*lbal_addr;
	void __iomem		*lbam_addr;
	void __iomem		*lbah_addr;
	void __iomem		*device_addr;
	void __iomem		*status_addr;
	void __iomem		*command_addr;
	void __iomem		*altstatus_addr;
	void __iomem		*ctl_addr;
#ifdef CONFIG_ATA_BMDMA
	void __iomem		*bmdma_addr;
#endif /* CONFIG_ATA_BMDMA */
	void __iomem		*scr_addr;
};
#endif /* CONFIG_ATA_SFF */

struct ata_host {
	spinlock_t		lock;
	struct device 		*dev;
	void __iomem * const	*iomap;
	unsigned int		n_ports;
	unsigned int		n_tags;			/* nr of NCQ tags */
	void			*private_data;
	struct ata_port_operations *ops;
	unsigned long		flags;
	struct kref		kref;

	struct mutex		eh_mutex;
	struct task_struct	*eh_owner;

	struct ata_port		*simplex_claimed;	/* channel owning the DMA */
	struct ata_port		*ports[];
};

struct ata_queued_cmd {
	struct ata_port		*ap;
	struct ata_device	*dev;

	struct scsi_cmnd	*scsicmd;
	void			(*scsidone)(struct scsi_cmnd *);

	struct ata_taskfile	tf;
	u8			cdb[ATAPI_CDB_LEN];

	unsigned long		flags;		/* ATA_QCFLAG_xxx */
	unsigned int		tag;		/* libata core tag */
	unsigned int		hw_tag;		/* driver tag */
	unsigned int		n_elem;
	unsigned int		orig_n_elem;

	int			dma_dir;

	unsigned int		sect_size;

	unsigned int		nbytes;
	unsigned int		extrabytes;
	unsigned int		curbytes;

	struct scatterlist	sgent;

	struct scatterlist	*sg;

	struct scatterlist	*cursg;
	unsigned int		cursg_ofs;

	unsigned int		err_mask;
	struct ata_taskfile	result_tf;
	ata_qc_cb_t		complete_fn;

	void			*private_data;
	void			*lldd_task;
};

struct ata_port_stats {
	unsigned long		unhandled_irq;
	unsigned long		idle_irq;
	unsigned long		rw_reqbuf;
};

struct ata_ering_entry {
	unsigned int		eflags;
	unsigned int		err_mask;
	u64			timestamp;
};

struct ata_ering {
	int			cursor;
	struct ata_ering_entry	ring[ATA_ERING_SIZE];
};

struct ata_cpr {
	u8			num;
	u8			num_storage_elements;
	u64			start_lba;
	u64			num_lbas;
};

struct ata_cpr_log {
	u8			nr_cpr;
	struct ata_cpr		cpr[] __counted_by(nr_cpr);
};

struct ata_cdl {
	/*
	 * Buffer to cache the CDL log page 18h (command duration descriptors)
	 * for SCSI-ATA translation.
	 */
	u8			desc_log_buf[ATA_LOG_CDL_SIZE];

	/*
	 * Buffer to handle reading the sense data for successful NCQ Commands
	 * log page for commands using a CDL with one of the limits policy set
	 * to 0xD (successful completion with sense data available bit set).
	 */
	u8			ncq_sense_log_buf[ATA_LOG_SENSE_NCQ_SIZE];
};

struct ata_device {
	struct ata_link		*link;
	unsigned int		devno;		/* 0 or 1 */
	unsigned int		quirks;		/* List of broken features */
	unsigned long		flags;		/* ATA_DFLAG_xxx */
	struct scsi_device	*sdev;		/* attached SCSI device */
	void			*private_data;
#ifdef CONFIG_ATA_ACPI
	union acpi_object	*gtf_cache;
	unsigned int		gtf_filter;
#endif
#ifdef CONFIG_SATA_ZPODD
	void			*zpodd;
#endif
	struct device		tdev;
	/* n_sector is CLEAR_BEGIN, read comment above CLEAR_BEGIN */
	u64			n_sectors;	/* size of device, if ATA */
	u64			n_native_sectors; /* native size, if ATA */
	unsigned int		class;		/* ATA_DEV_xxx */
	unsigned long		unpark_deadline;

	u8			pio_mode;
	u8			dma_mode;
	u8			xfer_mode;
	unsigned int		xfer_shift;	/* ATA_SHIFT_xxx */

	unsigned int		multi_count;	/* sectors count for
						   READ/WRITE MULTIPLE */
	unsigned int		max_sectors;	/* per-device max sectors */
	unsigned int		cdb_len;

	/* per-dev xfer mask */
	unsigned int		pio_mask;
	unsigned int		mwdma_mask;
	unsigned int		udma_mask;

	/* for CHS addressing */
	u16			cylinders;	/* Number of cylinders */
	u16			heads;		/* Number of heads */
	u16			sectors;	/* Number of sectors per track */

	union {
		u16		id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
		u32		gscr[SATA_PMP_GSCR_DWORDS]; /* PMP GSCR block */
	} ____cacheline_aligned;

	/* DEVSLP Timing Variables from Identify Device Data Log */
	u8			devslp_timing[ATA_LOG_DEVSLP_SIZE];

	/* NCQ send and receive log subcommand support */
	u8			ncq_send_recv_cmds[ATA_LOG_NCQ_SEND_RECV_SIZE];
	u8			ncq_non_data_cmds[ATA_LOG_NCQ_NON_DATA_SIZE];

	/* ZAC zone configuration */
	u32			zac_zoned_cap;
	u32			zac_zones_optimal_open;
	u32			zac_zones_optimal_nonseq;
	u32			zac_zones_max_open;

	/* Concurrent positioning ranges */
	struct ata_cpr_log	*cpr_log;

	/* Command Duration Limits support */
	struct ata_cdl		*cdl;

	/* error history */
	int			spdn_cnt;
	/* ering is CLEAR_END, read comment above CLEAR_END */
	struct ata_ering	ering;

	/* For EH */
	u8			sector_buf[ATA_SECT_SIZE] ____cacheline_aligned;
};

/* Fields between ATA_DEVICE_CLEAR_BEGIN and ATA_DEVICE_CLEAR_END are
 * cleared to zero on ata_dev_init().
 */
#define ATA_DEVICE_CLEAR_BEGIN		offsetof(struct ata_device, n_sectors)
#define ATA_DEVICE_CLEAR_END		offsetof(struct ata_device, ering)

struct ata_eh_info {
	struct ata_device	*dev;		/* offending device */
	u32			serror;		/* SError from LLDD */
	unsigned int		err_mask;	/* port-wide err_mask */
	unsigned int		action;		/* ATA_EH_* action mask */
	unsigned int		dev_action[ATA_MAX_DEVICES]; /* dev EH action */
	unsigned int		flags;		/* ATA_EHI_* flags */

	unsigned int		probe_mask;

	char			desc[ATA_EH_DESC_LEN];
	int			desc_len;
};

struct ata_eh_context {
	struct ata_eh_info	i;
	int			tries[ATA_MAX_DEVICES];
	int			cmd_timeout_idx[ATA_MAX_DEVICES]
					       [ATA_EH_CMD_TIMEOUT_TABLE_SIZE];
	unsigned int		classes[ATA_MAX_DEVICES];
	unsigned int		did_probe_mask;
	unsigned int		unloaded_mask;
	unsigned int		saved_ncq_enabled;
	u8			saved_xfer_mode[ATA_MAX_DEVICES];
	/* timestamp for the last reset attempt or success */
	unsigned long		last_reset;
};

struct ata_acpi_drive
{
	u32 pio;
	u32 dma;
} __packed;

struct ata_acpi_gtm {
	struct ata_acpi_drive drive[2];
	u32 flags;
} __packed;

struct ata_link {
	struct ata_port		*ap;
	int			pmp;		/* port multiplier port # */

	struct device		tdev;
	unsigned int		active_tag;	/* active tag on this link */
	u32			sactive;	/* active NCQ commands */

	unsigned int		flags;		/* ATA_LFLAG_xxx */

	u32			saved_scontrol;	/* SControl on probe */
	unsigned int		hw_sata_spd_limit;
	unsigned int		sata_spd_limit;
	unsigned int		sata_spd;	/* current SATA PHY speed */
	enum ata_lpm_policy	lpm_policy;

	/* record runtime error info, protected by host_set lock */
	struct ata_eh_info	eh_info;
	/* EH context */
	struct ata_eh_context	eh_context;

	struct ata_device	device[ATA_MAX_DEVICES];

	unsigned long		last_lpm_change; /* when last LPM change happened */
};
#define ATA_LINK_CLEAR_BEGIN		offsetof(struct ata_link, active_tag)
#define ATA_LINK_CLEAR_END		offsetof(struct ata_link, device[0])

struct ata_port {
	struct Scsi_Host	*scsi_host; /* our co-allocated scsi host */
	struct ata_port_operations *ops;
	spinlock_t		*lock;
	/* Flags owned by the EH context. Only EH should touch these once the
	   port is active */
	unsigned long		flags;	/* ATA_FLAG_xxx */
	/* Flags that change dynamically, protected by ap->lock */
	unsigned int		pflags; /* ATA_PFLAG_xxx */
	unsigned int		print_id; /* user visible unique port ID */
	unsigned int		port_no; /* 0 based port no. inside the host */

#ifdef CONFIG_ATA_SFF
	struct ata_ioports	ioaddr;	/* ATA cmd/ctl/dma register blocks */
	u8			ctl;	/* cache of ATA control register */
	u8			last_ctl;	/* Cache last written value */
	struct ata_link*	sff_pio_task_link; /* link currently used */
	struct delayed_work	sff_pio_task;
#ifdef CONFIG_ATA_BMDMA
	struct ata_bmdma_prd	*bmdma_prd;	/* BMDMA SG list */
	dma_addr_t		bmdma_prd_dma;	/* and its DMA mapping */
#endif /* CONFIG_ATA_BMDMA */
#endif /* CONFIG_ATA_SFF */

	unsigned int		pio_mask;
	unsigned int		mwdma_mask;
	unsigned int		udma_mask;
	unsigned int		cbl;	/* cable type; ATA_CBL_xxx */

	struct ata_queued_cmd	qcmd[ATA_MAX_QUEUE + 1];
	u64			qc_active;
	int			nr_active_links; /* #links with active qcs */

	struct ata_link		link;		/* host default link */
	struct ata_link		*slave_link;	/* see ata_slave_link_init() */

	int			nr_pmp_links;	/* nr of available PMP links */
	struct ata_link		*pmp_link;	/* array of PMP links */
	struct ata_link		*excl_link;	/* for PMP qc exclusion */

	struct ata_port_stats	stats;
	struct ata_host		*host;
	struct device 		*dev;
	struct device		tdev;

	struct mutex		scsi_scan_mutex;
	struct delayed_work	hotplug_task;
	struct delayed_work	scsi_rescan_task;

	unsigned int		hsm_task_state;

	struct list_head	eh_done_q;
	wait_queue_head_t	eh_wait_q;
	int			eh_tries;
	struct completion	park_req_pending;

	pm_message_t		pm_mesg;
	enum ata_lpm_policy	target_lpm_policy;

	struct timer_list	fastdrain_timer;
	unsigned int		fastdrain_cnt;

	async_cookie_t		cookie;

	int			em_message_type;
	void			*private_data;

#ifdef CONFIG_ATA_ACPI
	struct ata_acpi_gtm	__acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif
};

/* The following initializer overrides a method to NULL whether one of
 * its parent has the method defined or not.  This is equivalent to
 * ERR_PTR(-ENOENT).  Unfortunately, ERR_PTR doesn't render a constant
 * expression and thus can't be used as an initializer.
 */
#define ATA_OP_NULL		(void *)(unsigned long)(-ENOENT)

struct ata_port_operations {
	/*
	 * Command execution
	 */
	int (*qc_defer)(struct ata_queued_cmd *qc);
	int (*check_atapi_dma)(struct ata_queued_cmd *qc);
	enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *qc);
	unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
	void (*qc_fill_rtf)(struct ata_queued_cmd *qc);
	void (*qc_ncq_fill_rtf)(struct ata_port *ap, u64 done_mask);

	/*
	 * Configuration and exception handling
	 */
	int  (*cable_detect)(struct ata_port *ap);
	unsigned int (*mode_filter)(struct ata_device *dev, unsigned int xfer_mask);
	void (*set_piomode)(struct ata_port *ap, struct ata_device *dev);
	void (*set_dmamode)(struct ata_port *ap, struct ata_device *dev);
	int  (*set_mode)(struct ata_link *link, struct ata_device **r_failed_dev);
	unsigned int (*read_id)(struct ata_device *dev, struct ata_taskfile *tf,
				__le16 *id);

	void (*dev_config)(struct ata_device *dev);

	void (*freeze)(struct ata_port *ap);
	void (*thaw)(struct ata_port *ap);
	ata_prereset_fn_t	prereset;
	ata_reset_fn_t		softreset;
	ata_reset_fn_t		hardreset;
	ata_postreset_fn_t	postreset;
	ata_prereset_fn_t	pmp_prereset;
	ata_reset_fn_t		pmp_softreset;
	ata_reset_fn_t		pmp_hardreset;
	ata_postreset_fn_t	pmp_postreset;
	void (*error_handler)(struct ata_port *ap);
	void (*lost_interrupt)(struct ata_port *ap);
	void (*post_internal_cmd)(struct ata_queued_cmd *qc);
	void (*sched_eh)(struct ata_port *ap);
	void (*end_eh)(struct ata_port *ap);

	/*
	 * Optional features
	 */
	int  (*scr_read)(struct ata_link *link, unsigned int sc_reg, u32 *val);
	int  (*scr_write)(struct ata_link *link, unsigned int sc_reg, u32 val);
	void (*pmp_attach)(struct ata_port *ap);
	void (*pmp_detach)(struct ata_port *ap);
	int  (*set_lpm)(struct ata_link *link, enum ata_lpm_policy policy,
			unsigned hints);

	/*
	 * Start, stop, suspend and resume
	 */
	int  (*port_suspend)(struct ata_port *ap, pm_message_t mesg);
	int  (*port_resume)(struct ata_port *ap);
	int  (*port_start)(struct ata_port *ap);
	void (*port_stop)(struct ata_port *ap);
	void (*host_stop)(struct ata_host *host);

#ifdef CONFIG_ATA_SFF
	/*
	 * SFF / taskfile oriented ops
	 */
	void (*sff_dev_select)(struct ata_port *ap, unsigned int device);
	void (*sff_set_devctl)(struct ata_port *ap, u8 ctl);
	u8   (*sff_check_status)(struct ata_port *ap);
	u8   (*sff_check_altstatus)(struct ata_port *ap);
	void (*sff_tf_load)(struct ata_port *ap, const struct ata_taskfile *tf);
	void (*sff_tf_read)(struct ata_port *ap, struct ata_taskfile *tf);
	void (*sff_exec_command)(struct ata_port *ap,
				 const struct ata_taskfile *tf);
	unsigned int (*sff_data_xfer)(struct ata_queued_cmd *qc,
			unsigned char *buf, unsigned int buflen, int rw);
	void (*sff_irq_on)(struct ata_port *);
	bool (*sff_irq_check)(struct ata_port *);
	void (*sff_irq_clear)(struct ata_port *);
	void (*sff_drain_fifo)(struct ata_queued_cmd *qc);

#ifdef CONFIG_ATA_BMDMA
	void (*bmdma_setup)(struct ata_queued_cmd *qc);
	void (*bmdma_start)(struct ata_queued_cmd *qc);
	void (*bmdma_stop)(struct ata_queued_cmd *qc);
	u8   (*bmdma_status)(struct ata_port *ap);
#endif /* CONFIG_ATA_BMDMA */
#endif /* CONFIG_ATA_SFF */

	ssize_t (*em_show)(struct ata_port *ap, char *buf);
	ssize_t (*em_store)(struct ata_port *ap, const char *message,
			    size_t size);
	ssize_t (*sw_activity_show)(struct ata_device *dev, char *buf);
	ssize_t (*sw_activity_store)(struct ata_device *dev,
				     enum sw_activity val);
	ssize_t (*transmit_led_message)(struct ata_port *ap, u32 state,
					ssize_t size);

	/*
	 * ->inherits must be the last field and all the preceding
	 * fields must be pointers.
	 */
	const struct ata_port_operations	*inherits;
};

struct ata_port_info {
	unsigned long		flags;
	unsigned long		link_flags;
	unsigned int		pio_mask;
	unsigned int		mwdma_mask;
	unsigned int		udma_mask;
	struct ata_port_operations *port_ops;
	void 			*private_data;
};

struct ata_timing {
	unsigned short mode;		/* ATA mode */
	unsigned short setup;		/* t1 */
	unsigned short act8b;		/* t2 for 8-bit I/O */
	unsigned short rec8b;		/* t2i for 8-bit I/O */
	unsigned short cyc8b;		/* t0 for 8-bit I/O */
	unsigned short active;		/* t2 or tD */
	unsigned short recover;		/* t2i or tK */
	unsigned short dmack_hold;	/* tj */
	unsigned short cycle;		/* t0 */
	unsigned short udma;		/* t2CYCTYP/2 */
};

/*
 * Core layer - drivers/ata/libata-core.c
 */
extern struct ata_port_operations ata_dummy_port_ops;
extern const struct ata_port_info ata_dummy_port_info;

static inline bool ata_is_atapi(u8 prot)
{
	return prot & ATA_PROT_FLAG_ATAPI;
}

static inline bool ata_is_pio(u8 prot)
{
	return prot & ATA_PROT_FLAG_PIO;
}

static inline bool ata_is_dma(u8 prot)
{
	return prot & ATA_PROT_FLAG_DMA;
}

static inline bool ata_is_ncq(u8 prot)
{
	return prot & ATA_PROT_FLAG_NCQ;
}

static inline bool ata_is_data(u8 prot)
{
	return prot & (ATA_PROT_FLAG_PIO | ATA_PROT_FLAG_DMA);
}

static inline int is_multi_taskfile(struct ata_taskfile *tf)
{
	return (tf->command == ATA_CMD_READ_MULTI) ||
	       (tf->command == ATA_CMD_WRITE_MULTI) ||
	       (tf->command == ATA_CMD_READ_MULTI_EXT) ||
	       (tf->command == ATA_CMD_WRITE_MULTI_EXT) ||
	       (tf->command == ATA_CMD_WRITE_MULTI_FUA_EXT);
}

static inline int ata_port_is_dummy(struct ata_port *ap)
{
	return ap->ops == &ata_dummy_port_ops;
}

static inline bool ata_port_is_frozen(const struct ata_port *ap)
{
	return ap->pflags & ATA_PFLAG_FROZEN;
}

extern int ata_std_prereset(struct ata_link *link, unsigned long deadline);
extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline,
				int (*check_ready)(struct ata_link *link));
extern void ata_std_postreset(struct ata_link *link, unsigned int *classes);

extern struct ata_host *ata_host_alloc(struct device *dev, int n_ports);
extern struct ata_host *ata_host_alloc_pinfo(struct device *dev,
			const struct ata_port_info * const * ppi, int n_ports);
extern void ata_host_get(struct ata_host *host);
extern void ata_host_put(struct ata_host *host);
extern int ata_host_start(struct ata_host *host);
extern int ata_host_register(struct ata_host *host,
			     const struct scsi_host_template *sht);
extern int ata_host_activate(struct ata_host *host, int irq,
			     irq_handler_t irq_handler, unsigned long irq_flags,
			     const struct scsi_host_template *sht);
extern void ata_host_detach(struct ata_host *host);
extern void ata_host_init(struct ata_host *, struct device *, struct ata_port_operations *);
extern int ata_scsi_ioctl(struct scsi_device *dev, unsigned int cmd,
			  void __user *arg);
#ifdef CONFIG_COMPAT
#define ATA_SCSI_COMPAT_IOCTL .compat_ioctl = ata_scsi_ioctl,
#else
#define ATA_SCSI_COMPAT_IOCTL /* empty */
#endif
extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd);
#if IS_REACHABLE(CONFIG_ATA)
bool ata_scsi_dma_need_drain(struct request *rq);
#else
#define ata_scsi_dma_need_drain NULL
#endif
extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev,
			    unsigned int cmd, void __user *arg);
extern bool ata_link_online(struct ata_link *link);
extern bool ata_link_offline(struct ata_link *link);
#ifdef CONFIG_PM
extern void ata_host_suspend(struct ata_host *host, pm_message_t mesg);
extern void ata_host_resume(struct ata_host *host);
extern void ata_sas_port_suspend(struct ata_port *ap);
extern void ata_sas_port_resume(struct ata_port *ap);
#else
static inline void ata_sas_port_suspend(struct ata_port *ap)
{
}
static inline void ata_sas_port_resume(struct ata_port *ap)
{
}
#endif
extern int ata_ratelimit(void);
extern void ata_msleep(struct ata_port *ap, unsigned int msecs);
extern u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask,
			     u32 val, unsigned int interval, unsigned int timeout);
extern int atapi_cmd_type(u8 opcode);
extern unsigned int ata_pack_xfermask(unsigned int pio_mask,
				      unsigned int mwdma_mask,
				      unsigned int udma_mask);
extern void ata_unpack_xfermask(unsigned int xfer_mask,
				unsigned int *pio_mask,
				unsigned int *mwdma_mask,
				unsigned int *udma_mask);
extern u8 ata_xfer_mask2mode(unsigned int xfer_mask);
extern unsigned int ata_xfer_mode2mask(u8 xfer_mode);
extern int ata_xfer_mode2shift(u8 xfer_mode);
extern const char *ata_mode_string(unsigned int xfer_mask);
extern unsigned int ata_id_xfermask(const u16 *id);
extern int ata_std_qc_defer(struct ata_queued_cmd *qc);
extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
		 unsigned int n_elem);
extern unsigned int ata_dev_classify(const struct ata_taskfile *tf);
extern unsigned int ata_port_classify(struct ata_port *ap,
				      const struct ata_taskfile *tf);
extern void ata_dev_disable(struct ata_device *adev);
extern void ata_id_string(const u16 *id, unsigned char *s,
			  unsigned int ofs, unsigned int len);
extern void ata_id_c_string(const u16 *id, unsigned char *s,
			    unsigned int ofs, unsigned int len);
extern unsigned int ata_do_dev_read_id(struct ata_device *dev,
				       struct ata_taskfile *tf, __le16 *id);
extern void ata_qc_complete(struct ata_queued_cmd *qc);
extern u64 ata_qc_get_active(struct ata_port *ap);
extern void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd);
extern int ata_std_bios_param(struct scsi_device *sdev,
			      struct block_device *bdev,
			      sector_t capacity, int geom[]);
extern void ata_scsi_unlock_native_capacity(struct scsi_device *sdev);
extern int ata_scsi_sdev_init(struct scsi_device *sdev);
int ata_scsi_sdev_configure(struct scsi_device *sdev, struct queue_limits *lim);
extern void ata_scsi_sdev_destroy(struct scsi_device *sdev);
extern int ata_scsi_change_queue_depth(struct scsi_device *sdev,
				       int queue_depth);
extern int ata_change_queue_depth(struct ata_port *ap, struct scsi_device *sdev,
				  int queue_depth);
extern int ata_ncq_prio_supported(struct ata_port *ap, struct scsi_device *sdev,
				  bool *supported);
extern int ata_ncq_prio_enabled(struct ata_port *ap, struct scsi_device *sdev,
				bool *enabled);
extern int ata_ncq_prio_enable(struct ata_port *ap, struct scsi_device *sdev,
			       bool enable);
extern struct ata_device *ata_dev_pair(struct ata_device *adev);
extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev);
extern void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap);
extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_q);

/*
 * SATA specific code - drivers/ata/libata-sata.c
 */
#ifdef CONFIG_SATA_HOST
extern const unsigned int sata_deb_timing_normal[];
extern const unsigned int sata_deb_timing_hotplug[];
extern const unsigned int sata_deb_timing_long[];

static inline const unsigned int *
sata_ehc_deb_timing(struct ata_eh_context *ehc)
{
	if (ehc->i.flags & ATA_EHI_HOTPLUGGED)
		return sata_deb_timing_hotplug;
	else
		return sata_deb_timing_normal;
}

extern int sata_scr_valid(struct ata_link *link);
extern int sata_scr_read(struct ata_link *link, int reg, u32 *val);
extern int sata_scr_write(struct ata_link *link, int reg, u32 val);
extern int sata_scr_write_flush(struct ata_link *link, int reg, u32 val);
extern int sata_set_spd(struct ata_link *link);
int sata_std_hardreset(struct ata_link *link, unsigned int *class,
		       unsigned long deadline);
extern int sata_link_hardreset(struct ata_link *link,
			const unsigned int *timing, unsigned long deadline,
			bool *online, int (*check_ready)(struct ata_link *));
extern int sata_link_resume(struct ata_link *link, const unsigned int *params,
			    unsigned long deadline);
extern void ata_eh_analyze_ncq_error(struct ata_link *link);
#else
static inline const unsigned int *
sata_ehc_deb_timing(struct ata_eh_context *ehc)
{
	return NULL;
}
static inline int sata_scr_valid(struct ata_link *link) { return 0; }
static inline int sata_scr_read(struct ata_link *link, int reg, u32 *val)
{
	return -EOPNOTSUPP;
}
static inline int sata_scr_write(struct ata_link *link, int reg, u32 val)
{
	return -EOPNOTSUPP;
}
static inline int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)
{
	return -EOPNOTSUPP;
}
static inline int sata_set_spd(struct ata_link *link) { return -EOPNOTSUPP; }
static inline int sata_std_hardreset(struct ata_link *link, unsigned int *class,
				     unsigned long deadline)
{
	return -EOPNOTSUPP;
}
static inline int sata_link_hardreset(struct ata_link *link,
				      const unsigned int *timing,
				      unsigned long deadline,
				      bool *online,
				      int (*check_ready)(struct ata_link *))
{
	if (online)
		*online = false;
	return -EOPNOTSUPP;
}
static inline int sata_link_resume(struct ata_link *link,
				   const unsigned int *params,
				   unsigned long deadline)
{
	return -EOPNOTSUPP;
}
static inline void ata_eh_analyze_ncq_error(struct ata_link *link) { }
#endif
extern int sata_link_debounce(struct ata_link *link,
			      const unsigned int *params, unsigned long deadline);
extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,
			     bool spm_wakeup);
extern int ata_slave_link_init(struct ata_port *ap);
extern void ata_port_probe(struct ata_port *ap);
extern struct ata_port *ata_port_alloc(struct ata_host *host);
extern void ata_port_free(struct ata_port *ap);
extern int ata_tport_add(struct device *parent, struct ata_port *ap);
extern void ata_tport_delete(struct ata_port *ap);
int ata_sas_sdev_configure(struct scsi_device *sdev, struct queue_limits *lim,
			   struct ata_port *ap);
extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap);
extern void ata_tf_to_fis(const struct ata_taskfile *tf,
			  u8 pmp, int is_cmd, u8 *fis);
extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf);
extern int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active);
extern bool sata_lpm_ignore_phy_events(struct ata_link *link);
extern int sata_async_notification(struct ata_port *ap);

extern int ata_cable_40wire(struct ata_port *ap);
extern int ata_cable_80wire(struct ata_port *ap);
extern int ata_cable_sata(struct ata_port *ap);
extern int ata_cable_ignore(struct ata_port *ap);
extern int ata_cable_unknown(struct ata_port *ap);

/* Timing helpers */
extern unsigned int ata_pio_need_iordy(const struct ata_device *);
extern u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle);

/* PCI */
#ifdef CONFIG_PCI
struct pci_dev;

struct pci_bits {
	unsigned int		reg;	/* PCI config register to read */
	unsigned int		width;	/* 1 (8 bit), 2 (16 bit), 4 (32 bit) */
	unsigned long		mask;
	unsigned long		val;
};

extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits);
extern void ata_pci_shutdown_one(struct pci_dev *pdev);
extern void ata_pci_remove_one(struct pci_dev *pdev);

#ifdef CONFIG_PM
extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg);
extern int __must_check ata_pci_device_do_resume(struct pci_dev *pdev);
extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
extern int ata_pci_device_resume(struct pci_dev *pdev);
#endif /* CONFIG_PM */
#endif /* CONFIG_PCI */

struct platform_device;

extern void ata_platform_remove_one(struct platform_device *pdev);

/*
 * ACPI - drivers/ata/libata-acpi.c
 */
#ifdef CONFIG_ATA_ACPI
static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)
{
	if (ap->pflags & ATA_PFLAG_INIT_GTM_VALID)
		return &ap->__acpi_init_gtm;
	return NULL;
}
int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm);
int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *stm);
unsigned int ata_acpi_gtm_xfermask(struct ata_device *dev,
				   const struct ata_acpi_gtm *gtm);
int ata_acpi_cbl_pata_type(struct ata_port *ap);
#else
static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)
{
	return NULL;
}

static inline int ata_acpi_stm(const struct ata_port *ap,
			       struct ata_acpi_gtm *stm)
{
	return -ENOSYS;
}

static inline int ata_acpi_gtm(const struct ata_port *ap,
			       struct ata_acpi_gtm *stm)
{
	return -ENOSYS;
}

static inline unsigned int ata_acpi_gtm_xfermask(struct ata_device *dev,
					const struct ata_acpi_gtm *gtm)
{
	return 0;
}

static inline int ata_acpi_cbl_pata_type(struct ata_port *ap)
{
	return ATA_CBL_PATA40;
}
#endif

/*
 * EH - drivers/ata/libata-eh.c
 */
extern void ata_port_schedule_eh(struct ata_port *ap);
extern void ata_port_wait_eh(struct ata_port *ap);
extern int ata_link_abort(struct ata_link *link);
extern int ata_port_abort(struct ata_port *ap);
extern int ata_port_freeze(struct ata_port *ap);

extern void ata_eh_freeze_port(struct ata_port *ap);
extern void ata_eh_thaw_port(struct ata_port *ap);

extern void ata_eh_qc_complete(struct ata_queued_cmd *qc);
extern void ata_eh_qc_retry(struct ata_queued_cmd *qc);

extern void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
		      ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
		      ata_postreset_fn_t postreset);
extern void ata_std_error_handler(struct ata_port *ap);
extern void ata_std_sched_eh(struct ata_port *ap);
extern void ata_std_end_eh(struct ata_port *ap);
extern int ata_link_nr_enabled(struct ata_link *link);

/*
 * Base operations to inherit from and initializers for sht
 *
 * Operations
 *
 * base  : Common to all libata drivers.
 * sata  : SATA controllers w/ native interface.
 * pmp   : SATA controllers w/ PMP support.
 * sff   : SFF ATA controllers w/o BMDMA support.
 * bmdma : SFF ATA controllers w/ BMDMA support.
 *
 * sht initializers
 *
 * BASE  : Common to all libata drivers.  The user must set
 *	   sg_tablesize and dma_boundary.
 * PIO   : SFF ATA controllers w/ only PIO support.
 * BMDMA : SFF ATA controllers w/ BMDMA support.  sg_tablesize and
 *	   dma_boundary are set to BMDMA limits.
 * NCQ   : SATA controllers supporting NCQ.  The user must set
 *	   sg_tablesize, dma_boundary and can_queue.
 */
extern const struct ata_port_operations ata_base_port_ops;
extern const struct ata_port_operations sata_port_ops;
extern const struct attribute_group *ata_common_sdev_groups[];

/*
 * All sht initializers (BASE, PIO, BMDMA, NCQ) must be instantiated
 * by the edge drivers.  Because the 'module' field of sht must be the
 * edge driver's module reference, otherwise the driver can be unloaded
 * even if the scsi_device is being accessed.
 */
#define __ATA_BASE_SHT(drv_name)				\
	.module			= THIS_MODULE,			\
	.name			= drv_name,			\
	.ioctl			= ata_scsi_ioctl,		\
	ATA_SCSI_COMPAT_IOCTL					\
	.queuecommand		= ata_scsi_queuecmd,		\
	.dma_need_drain		= ata_scsi_dma_need_drain,	\
	.this_id		= ATA_SHT_THIS_ID,		\
	.emulated		= ATA_SHT_EMULATED,		\
	.proc_name		= drv_name,			\
	.sdev_init		= ata_scsi_sdev_init,		\
	.sdev_destroy		= ata_scsi_sdev_destroy,	\
	.bios_param		= ata_std_bios_param,		\
	.unlock_native_capacity	= ata_scsi_unlock_native_capacity,\
	.max_sectors		= ATA_MAX_SECTORS_LBA48

#define ATA_SUBBASE_SHT(drv_name)				\
	__ATA_BASE_SHT(drv_name),				\
	.can_queue		= ATA_DEF_QUEUE,		\
	.tag_alloc_policy_rr	= true,				\
	.sdev_configure		= ata_scsi_sdev_configure

#define ATA_SUBBASE_SHT_QD(drv_name, drv_qd)			\
	__ATA_BASE_SHT(drv_name),				\
	.can_queue		= drv_qd,			\
	.tag_alloc_policy_rr	= true,				\
	.sdev_configure		= ata_scsi_sdev_configure

#define ATA_BASE_SHT(drv_name)					\
	ATA_SUBBASE_SHT(drv_name),				\
	.sdev_groups		= ata_common_sdev_groups

#ifdef CONFIG_SATA_HOST
extern const struct attribute_group *ata_ncq_sdev_groups[];

#define ATA_NCQ_SHT(drv_name)					\
	ATA_SUBBASE_SHT(drv_name),				\
	.sdev_groups		= ata_ncq_sdev_groups,		\
	.change_queue_depth	= ata_scsi_change_queue_depth

#define ATA_NCQ_SHT_QD(drv_name, drv_qd)			\
	ATA_SUBBASE_SHT_QD(drv_name, drv_qd),			\
	.sdev_groups		= ata_ncq_sdev_groups,		\
	.change_queue_depth	= ata_scsi_change_queue_depth
#endif

/*
 * PMP helpers
 */
#ifdef CONFIG_SATA_PMP
static inline bool sata_pmp_supported(struct ata_port *ap)
{
	return ap->flags & ATA_FLAG_PMP;
}

static inline bool sata_pmp_attached(struct ata_port *ap)
{
	return ap->nr_pmp_links != 0;
}

static inline bool ata_is_host_link(const struct ata_link *link)
{
	return link == &link->ap->link || link == link->ap->slave_link;
}
#else /* CONFIG_SATA_PMP */
static inline bool sata_pmp_supported(struct ata_port *ap)
{
	return false;
}

static inline bool sata_pmp_attached(struct ata_port *ap)
{
	return false;
}

static inline bool ata_is_host_link(const struct ata_link *link)
{
	return true;
}
#endif /* CONFIG_SATA_PMP */

static inline int sata_srst_pmp(struct ata_link *link)
{
	if (sata_pmp_supported(link->ap) && ata_is_host_link(link))
		return SATA_PMP_CTRL_PORT;
	return link->pmp;
}

#define ata_port_printk(level, ap, fmt, ...)			\
	pr_ ## level ("ata%u: " fmt, (ap)->print_id, ##__VA_ARGS__)

#define ata_port_err(ap, fmt, ...)				\
	ata_port_printk(err, ap, fmt, ##__VA_ARGS__)
#define ata_port_warn(ap, fmt, ...)				\
	ata_port_printk(warn, ap, fmt, ##__VA_ARGS__)
#define ata_port_notice(ap, fmt, ...)				\
	ata_port_printk(notice, ap, fmt, ##__VA_ARGS__)
#define ata_port_info(ap, fmt, ...)				\
	ata_port_printk(info, ap, fmt, ##__VA_ARGS__)
#define ata_port_dbg(ap, fmt, ...)				\
	ata_port_printk(debug, ap, fmt, ##__VA_ARGS__)

#define ata_link_printk(level, link, fmt, ...)			\
do {								\
	if (sata_pmp_attached((link)->ap) ||			\
	    (link)->ap->slave_link)				\
		pr_ ## level ("ata%u.%02u: " fmt,		\
			      (link)->ap->print_id,		\
			      (link)->pmp,			\
			      ##__VA_ARGS__);			\
        else							\
		pr_ ## level ("ata%u: " fmt,			\
			      (link)->ap->print_id,		\
			      ##__VA_ARGS__);			\
} while (0)

#define ata_link_err(link, fmt, ...)				\
	ata_link_printk(err, link, fmt, ##__VA_ARGS__)
#define ata_link_warn(link, fmt, ...)				\
	ata_link_printk(warn, link, fmt, ##__VA_ARGS__)
#define ata_link_notice(link, fmt, ...)				\
	ata_link_printk(notice, link, fmt, ##__VA_ARGS__)
#define ata_link_info(link, fmt, ...)				\
	ata_link_printk(info, link, fmt, ##__VA_ARGS__)
#define ata_link_dbg(link, fmt, ...)				\
	ata_link_printk(debug, link, fmt, ##__VA_ARGS__)

#define ata_dev_printk(level, dev, fmt, ...)			\
        pr_ ## level("ata%u.%02u: " fmt,			\
               (dev)->link->ap->print_id,			\
	       (dev)->link->pmp + (dev)->devno,			\
	       ##__VA_ARGS__)

#define ata_dev_err(dev, fmt, ...)				\
	ata_dev_printk(err, dev, fmt, ##__VA_ARGS__)
#define ata_dev_warn(dev, fmt, ...)				\
	ata_dev_printk(warn, dev, fmt, ##__VA_ARGS__)
#define ata_dev_notice(dev, fmt, ...)				\
	ata_dev_printk(notice, dev, fmt, ##__VA_ARGS__)
#define ata_dev_info(dev, fmt, ...)				\
	ata_dev_printk(info, dev, fmt, ##__VA_ARGS__)
#define ata_dev_dbg(dev, fmt, ...)				\
	ata_dev_printk(debug, dev, fmt, ##__VA_ARGS__)

void ata_print_version(const struct device *dev, const char *version);

/*
 * ata_eh_info helpers
 */
extern __printf(2, 3)
void __ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...);
extern __printf(2, 3)
void ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...);
extern void ata_ehi_clear_desc(struct ata_eh_info *ehi);

static inline void ata_ehi_hotplugged(struct ata_eh_info *ehi)
{
	ehi->probe_mask |= (1 << ATA_MAX_DEVICES) - 1;
	ehi->flags |= ATA_EHI_HOTPLUGGED;
	ehi->action |= ATA_EH_RESET | ATA_EH_ENABLE_LINK;
	ehi->err_mask |= AC_ERR_ATA_BUS;
}

/*
 * port description helpers
 */
extern __printf(2, 3)
void ata_port_desc(struct ata_port *ap, const char *fmt, ...);
#ifdef CONFIG_PCI
extern void ata_port_pbar_desc(struct ata_port *ap, int bar, ssize_t offset,
			       const char *name);
#endif
static inline void ata_port_desc_misc(struct ata_port *ap, int irq)
{
	ata_port_desc(ap, "irq %d", irq);
	ata_port_desc(ap, "lpm-pol %d", ap->target_lpm_policy);
}

static inline bool ata_tag_internal(unsigned int tag)
{
	return tag == ATA_TAG_INTERNAL;
}

static inline bool ata_tag_valid(unsigned int tag)
{
	return tag < ATA_MAX_QUEUE || ata_tag_internal(tag);
}

#define __ata_qc_for_each(ap, qc, tag, max_tag, fn)		\
	for ((tag) = 0; (tag) < (max_tag) &&			\
	     ({ qc = fn((ap), (tag)); 1; }); (tag)++)		\

/*
 * Internal use only, iterate commands ignoring error handling and
 * status of 'qc'.
 */
#define ata_qc_for_each_raw(ap, qc, tag)					\
	__ata_qc_for_each(ap, qc, tag, ATA_MAX_QUEUE, __ata_qc_from_tag)

/*
 * Iterate all potential commands that can be queued
 */
#define ata_qc_for_each(ap, qc, tag)					\
	__ata_qc_for_each(ap, qc, tag, ATA_MAX_QUEUE, ata_qc_from_tag)

/*
 * Like ata_qc_for_each, but with the internal tag included
 */
#define ata_qc_for_each_with_internal(ap, qc, tag)			\
	__ata_qc_for_each(ap, qc, tag, ATA_MAX_QUEUE + 1, ata_qc_from_tag)

/*
 * device helpers
 */
static inline unsigned int ata_class_enabled(unsigned int class)
{
	return class == ATA_DEV_ATA || class == ATA_DEV_ATAPI ||
		class == ATA_DEV_PMP || class == ATA_DEV_SEMB ||
		class == ATA_DEV_ZAC;
}

static inline unsigned int ata_class_disabled(unsigned int class)
{
	return class == ATA_DEV_ATA_UNSUP || class == ATA_DEV_ATAPI_UNSUP ||
		class == ATA_DEV_PMP_UNSUP || class == ATA_DEV_SEMB_UNSUP ||
		class == ATA_DEV_ZAC_UNSUP;
}

static inline unsigned int ata_class_absent(unsigned int class)
{
	return !ata_class_enabled(class) && !ata_class_disabled(class);
}

static inline unsigned int ata_dev_enabled(const struct ata_device *dev)
{
	return ata_class_enabled(dev->class);
}

static inline unsigned int ata_dev_disabled(const struct ata_device *dev)
{
	return ata_class_disabled(dev->class);
}

static inline unsigned int ata_dev_absent(const struct ata_device *dev)
{
	return ata_class_absent(dev->class);
}

/*
 * link helpers
 */
static inline int ata_link_max_devices(const struct ata_link *link)
{
	if (ata_is_host_link(link) && link->ap->flags & ATA_FLAG_SLAVE_POSS)
		return 2;
	return 1;
}

static inline int ata_link_active(struct ata_link *link)
{
	return ata_tag_valid(link->active_tag) || link->sactive;
}

/*
 * Iterators
 *
 * ATA_LITER_* constants are used to select link iteration mode and
 * ATA_DITER_* device iteration mode.
 *
 * For a custom iteration directly using ata_{link|dev}_next(), if
 * @link or @dev, respectively, is NULL, the first element is
 * returned.  @dev and @link can be any valid device or link and the
 * next element according to the iteration mode will be returned.
 * After the last element, NULL is returned.
 */
enum ata_link_iter_mode {
	ATA_LITER_EDGE,		/* if present, PMP links only; otherwise,
				 * host link.  no slave link */
	ATA_LITER_HOST_FIRST,	/* host link followed by PMP or slave links */
	ATA_LITER_PMP_FIRST,	/* PMP links followed by host link,
				 * slave link still comes after host link */
};

enum ata_dev_iter_mode {
	ATA_DITER_ENABLED,
	ATA_DITER_ENABLED_REVERSE,
	ATA_DITER_ALL,
	ATA_DITER_ALL_REVERSE,
};

extern struct ata_link *ata_link_next(struct ata_link *link,
				      struct ata_port *ap,
				      enum ata_link_iter_mode mode);

extern struct ata_device *ata_dev_next(struct ata_device *dev,
				       struct ata_link *link,
				       enum ata_dev_iter_mode mode);

/*
 * Shortcut notation for iterations
 *
 * ata_for_each_link() iterates over each link of @ap according to
 * @mode.  @link points to the current link in the loop.  @link is
 * NULL after loop termination.  ata_for_each_dev() works the same way
 * except that it iterates over each device of @link.
 *
 * Note that the mode prefixes ATA_{L|D}ITER_ shouldn't need to be
 * specified when using the following shorthand notations.  Only the
 * mode itself (EDGE, HOST_FIRST, ENABLED, etc...) should be
 * specified.  This not only increases brevity but also makes it
 * impossible to use ATA_LITER_* for device iteration or vice-versa.
 */
#define ata_for_each_link(link, ap, mode) \
	for ((link) = ata_link_next(NULL, (ap), ATA_LITER_##mode); (link); \
	     (link) = ata_link_next((link), (ap), ATA_LITER_##mode))

#define ata_for_each_dev(dev, link, mode) \
	for ((dev) = ata_dev_next(NULL, (link), ATA_DITER_##mode); (dev); \
	     (dev) = ata_dev_next((dev), (link), ATA_DITER_##mode))

/**
 *	ata_ncq_supported - Test whether NCQ is supported
 *	@dev: ATA device to test
 *
 *	LOCKING:
 *	spin_lock_irqsave(host lock)
 *
 *	RETURNS:
 *	true if @dev supports NCQ, false otherwise.
 */
static inline bool ata_ncq_supported(struct ata_device *dev)
{
	if (!IS_ENABLED(CONFIG_SATA_HOST))
		return false;
	return (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ;
}

/**
 *	ata_ncq_enabled - Test whether NCQ is enabled
 *	@dev: ATA device to test
 *
 *	LOCKING:
 *	spin_lock_irqsave(host lock)
 *
 *	RETURNS:
 *	true if NCQ is enabled for @dev, false otherwise.
 */
static inline bool ata_ncq_enabled(struct ata_device *dev)
{
	return ata_ncq_supported(dev) && !(dev->flags & ATA_DFLAG_NCQ_OFF);
}

static inline bool ata_fpdma_dsm_supported(struct ata_device *dev)
{
	return (dev->flags & ATA_DFLAG_NCQ_SEND_RECV) &&
		(dev->ncq_send_recv_cmds[ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET] &
		 ATA_LOG_NCQ_SEND_RECV_DSM_TRIM);
}

static inline bool ata_fpdma_read_log_supported(struct ata_device *dev)
{
	return (dev->flags & ATA_DFLAG_NCQ_SEND_RECV) &&
		(dev->ncq_send_recv_cmds[ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET] &
		 ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED);
}

static inline bool ata_fpdma_zac_mgmt_in_supported(struct ata_device *dev)
{
	return (dev->flags & ATA_DFLAG_NCQ_SEND_RECV) &&
		(dev->ncq_send_recv_cmds[ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET] &
		ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED);
}

static inline bool ata_fpdma_zac_mgmt_out_supported(struct ata_device *dev)
{
	return (dev->ncq_non_data_cmds[ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET] &
		ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT);
}

static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
{
	qc->tf.ctl |= ATA_NIEN;
}

static inline struct ata_queued_cmd *__ata_qc_from_tag(struct ata_port *ap,
						       unsigned int tag)
{
	if (ata_tag_valid(tag))
		return &ap->qcmd[tag];
	return NULL;
}

static inline struct ata_queued_cmd *ata_qc_from_tag(struct ata_port *ap,
						     unsigned int tag)
{
	struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);

	if (unlikely(!qc))
		return qc;

	if ((qc->flags & (ATA_QCFLAG_ACTIVE |
			  ATA_QCFLAG_EH)) == ATA_QCFLAG_ACTIVE)
		return qc;

	return NULL;
}

static inline unsigned int ata_qc_raw_nbytes(struct ata_queued_cmd *qc)
{
	return qc->nbytes - min(qc->extrabytes, qc->nbytes);
}

static inline void ata_tf_init(struct ata_device *dev, struct ata_taskfile *tf)
{
	memset(tf, 0, sizeof(*tf));

#ifdef CONFIG_ATA_SFF
	tf->ctl = dev->link->ap->ctl;
#else
	tf->ctl = ATA_DEVCTL_OBS;
#endif
	if (dev->devno == 0)
		tf->device = ATA_DEVICE_OBS;
	else
		tf->device = ATA_DEVICE_OBS | ATA_DEV1;
}

static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
{
	qc->dma_dir = DMA_NONE;
	qc->sg = NULL;
	qc->flags = 0;
	qc->cursg = NULL;
	qc->cursg_ofs = 0;
	qc->nbytes = qc->extrabytes = qc->curbytes = 0;
	qc->n_elem = 0;
	qc->err_mask = 0;
	qc->sect_size = ATA_SECT_SIZE;

	ata_tf_init(qc->dev, &qc->tf);

	/* init result_tf such that it indicates normal completion */
	qc->result_tf.command = ATA_DRDY;
	qc->result_tf.feature = 0;
}

static inline int ata_try_flush_cache(const struct ata_device *dev)
{
	return ata_id_wcache_enabled(dev->id) ||
	       ata_id_has_flush(dev->id) ||
	       ata_id_has_flush_ext(dev->id);
}

static inline unsigned int ac_err_mask(u8 status)
{
	if (status & (ATA_BUSY | ATA_DRQ))
		return AC_ERR_HSM;
	if (status & (ATA_ERR | ATA_DF))
		return AC_ERR_DEV;
	return 0;
}

static inline unsigned int __ac_err_mask(u8 status)
{
	unsigned int mask = ac_err_mask(status);
	if (mask == 0)
		return AC_ERR_OTHER;
	return mask;
}

static inline struct ata_port *ata_shost_to_port(struct Scsi_Host *host)
{
	return *(struct ata_port **)&host->hostdata[0];
}

static inline int ata_check_ready(u8 status)
{
	if (!(status & ATA_BUSY))
		return 1;

	/* 0xff indicates either no device or device not ready */
	if (status == 0xff)
		return -ENODEV;

	return 0;
}

static inline unsigned long ata_deadline(unsigned long from_jiffies,
					 unsigned int timeout_msecs)
{
	return from_jiffies + msecs_to_jiffies(timeout_msecs);
}

/* Don't open code these in drivers as there are traps. Firstly the range may
   change in future hardware and specs, secondly 0xFF means 'no DMA' but is
   > UDMA_0. Dyma ddreigiau */

static inline bool ata_using_mwdma(struct ata_device *adev)
{
	return adev->dma_mode >= XFER_MW_DMA_0 &&
		adev->dma_mode <= XFER_MW_DMA_4;
}

static inline bool ata_using_udma(struct ata_device *adev)
{
	return adev->dma_mode >= XFER_UDMA_0 &&
		adev->dma_mode <= XFER_UDMA_7;
}

static inline bool ata_dma_enabled(struct ata_device *adev)
{
	return adev->dma_mode != 0xFF;
}

/**************************************************************************
 * PATA timings - drivers/ata/libata-pata-timings.c
 */
extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode);
extern int ata_timing_compute(struct ata_device *, unsigned short,
			      struct ata_timing *, int, int);
extern void ata_timing_merge(const struct ata_timing *,
			     const struct ata_timing *, struct ata_timing *,
			     unsigned int);

/**************************************************************************
 * PMP - drivers/ata/libata-pmp.c
 */
#ifdef CONFIG_SATA_PMP

extern const struct ata_port_operations sata_pmp_port_ops;

extern int sata_pmp_qc_defer_cmd_switch(struct ata_queued_cmd *qc);
extern void sata_pmp_error_handler(struct ata_port *ap);

#else /* CONFIG_SATA_PMP */

#define sata_pmp_port_ops		sata_port_ops
#define sata_pmp_qc_defer_cmd_switch	ata_std_qc_defer
#define sata_pmp_error_handler		ata_std_error_handler

#endif /* CONFIG_SATA_PMP */


/**************************************************************************
 * SFF - drivers/ata/libata-sff.c
 */
#ifdef CONFIG_ATA_SFF

extern const struct ata_port_operations ata_sff_port_ops;
extern const struct ata_port_operations ata_bmdma32_port_ops;

/* PIO only, sg_tablesize and dma_boundary limits can be removed */
#define ATA_PIO_SHT(drv_name)					\
	ATA_BASE_SHT(drv_name),					\
	.sg_tablesize		= LIBATA_MAX_PRD,		\
	.dma_boundary		= ATA_DMA_BOUNDARY

extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device);
extern u8 ata_sff_check_status(struct ata_port *ap);
extern void ata_sff_pause(struct ata_port *ap);
extern void ata_sff_dma_pause(struct ata_port *ap);
extern int ata_sff_wait_ready(struct ata_link *link, unsigned long deadline);
extern void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf);
extern void ata_sff_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
extern void ata_sff_exec_command(struct ata_port *ap,
				 const struct ata_taskfile *tf);
extern unsigned int ata_sff_data_xfer(struct ata_queued_cmd *qc,
			unsigned char *buf, unsigned int buflen, int rw);
extern unsigned int ata_sff_data_xfer32(struct ata_queued_cmd *qc,
			unsigned char *buf, unsigned int buflen, int rw);
extern void ata_sff_irq_on(struct ata_port *ap);
extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
			    u8 status, int in_wq);
extern void ata_sff_queue_work(struct work_struct *work);
extern void ata_sff_queue_delayed_work(struct delayed_work *dwork,
		unsigned long delay);
extern void ata_sff_queue_pio_task(struct ata_link *link, unsigned long delay);
extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc);
extern void ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc);
extern unsigned int ata_sff_port_intr(struct ata_port *ap,
				      struct ata_queued_cmd *qc);
extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance);
extern void ata_sff_lost_interrupt(struct ata_port *ap);
extern void ata_sff_freeze(struct ata_port *ap);
extern void ata_sff_thaw(struct ata_port *ap);
extern int ata_sff_prereset(struct ata_link *link, unsigned long deadline);
extern unsigned int ata_sff_dev_classify(struct ata_device *dev, int present,
					  u8 *r_err);
extern int ata_sff_wait_after_reset(struct ata_link *link, unsigned int devmask,
				    unsigned long deadline);
extern int ata_sff_softreset(struct ata_link *link, unsigned int *classes,
			     unsigned long deadline);
extern int sata_sff_hardreset(struct ata_link *link, unsigned int *class,
			       unsigned long deadline);
extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes);
extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc);
extern void ata_sff_error_handler(struct ata_port *ap);
extern void ata_sff_std_ports(struct ata_ioports *ioaddr);
#ifdef CONFIG_PCI
extern int ata_pci_sff_init_host(struct ata_host *host);
extern int ata_pci_sff_prepare_host(struct pci_dev *pdev,
				    const struct ata_port_info * const * ppi,
				    struct ata_host **r_host);
extern int ata_pci_sff_activate_host(struct ata_host *host,
				     irq_handler_t irq_handler,
				     const struct scsi_host_template *sht);
extern int ata_pci_sff_init_one(struct pci_dev *pdev,
		const struct ata_port_info * const * ppi,
		const struct scsi_host_template *sht, void *host_priv, int hflags);
#endif /* CONFIG_PCI */

#ifdef CONFIG_ATA_BMDMA

extern const struct ata_port_operations ata_bmdma_port_ops;

#define ATA_BMDMA_SHT(drv_name)					\
	ATA_BASE_SHT(drv_name),					\
	.sg_tablesize		= LIBATA_MAX_PRD,		\
	.dma_boundary		= ATA_DMA_BOUNDARY

extern enum ata_completion_errors ata_bmdma_qc_prep(struct ata_queued_cmd *qc);
extern unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc);
extern enum ata_completion_errors ata_bmdma_dumb_qc_prep(struct ata_queued_cmd *qc);
extern unsigned int ata_bmdma_port_intr(struct ata_port *ap,
				      struct ata_queued_cmd *qc);
extern irqreturn_t ata_bmdma_interrupt(int irq, void *dev_instance);
extern void ata_bmdma_error_handler(struct ata_port *ap);
extern void ata_bmdma_post_internal_cmd(struct ata_queued_cmd *qc);
extern void ata_bmdma_irq_clear(struct ata_port *ap);
extern void ata_bmdma_setup(struct ata_queued_cmd *qc);
extern void ata_bmdma_start(struct ata_queued_cmd *qc);
extern void ata_bmdma_stop(struct ata_queued_cmd *qc);
extern u8 ata_bmdma_status(struct ata_port *ap);
extern int ata_bmdma_port_start(struct ata_port *ap);
extern int ata_bmdma_port_start32(struct ata_port *ap);

#ifdef CONFIG_PCI
extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev);
extern void ata_pci_bmdma_init(struct ata_host *host);
extern int ata_pci_bmdma_prepare_host(struct pci_dev *pdev,
				      const struct ata_port_info * const * ppi,
				      struct ata_host **r_host);
extern int ata_pci_bmdma_init_one(struct pci_dev *pdev,
				  const struct ata_port_info * const * ppi,
				  const struct scsi_host_template *sht,
				  void *host_priv, int hflags);
#endif /* CONFIG_PCI */
#endif /* CONFIG_ATA_BMDMA */

/**
 *	ata_sff_busy_wait - Wait for a port status register
 *	@ap: Port to wait for.
 *	@bits: bits that must be clear
 *	@max: number of 10uS waits to perform
 *
 *	Waits up to max*10 microseconds for the selected bits in the port's
 *	status register to be cleared.
 *	Returns final value of status register.
 *
 *	LOCKING:
 *	Inherited from caller.
 */
static inline u8 ata_sff_busy_wait(struct ata_port *ap, unsigned int bits,
				   unsigned int max)
{
	u8 status;

	do {
		udelay(10);
		status = ap->ops->sff_check_status(ap);
		max--;
	} while (status != 0xff && (status & bits) && (max > 0));

	return status;
}

/**
 *	ata_wait_idle - Wait for a port to be idle.
 *	@ap: Port to wait for.
 *
 *	Waits up to 10ms for port's BUSY and DRQ signals to clear.
 *	Returns final value of status register.
 *
 *	LOCKING:
 *	Inherited from caller.
 */
static inline u8 ata_wait_idle(struct ata_port *ap)
{
	u8 status = ata_sff_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);

	if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ)))
		ata_port_dbg(ap, "abnormal Status 0x%X\n", status);

	return status;
}
#endif /* CONFIG_ATA_SFF */

#endif /* __LINUX_LIBATA_H__ */

Filemanager

Name Type Size Permission Actions
amba Folder 0755
atomic Folder 0755
avf Folder 0755
bcma Folder 0755
bus Folder 0755
byteorder Folder 0755
can Folder 0755
cdx Folder 0755
ceph Folder 0755
clk Folder 0755
comedi Folder 0755
crush Folder 0755
decompress Folder 0755
device Folder 0755
dma Folder 0755
dsa Folder 0755
extcon Folder 0755
firmware Folder 0755
fpga Folder 0755
framer Folder 0755
fsl Folder 0755
gpio Folder 0755
greybus Folder 0755
habanalabs Folder 0755
hsi Folder 0755
i3c Folder 0755
iio Folder 0755
input Folder 0755
io_uring Folder 0755
irqchip Folder 0755
isdn Folder 0755
lockd Folder 0755
lsm Folder 0755
mailbox Folder 0755
mdio Folder 0755
memory Folder 0755
mfd Folder 0755
misc Folder 0755
mlx4 Folder 0755
mlx5 Folder 0755
mmc Folder 0755
mtd Folder 0755
mux Folder 0755
net Folder 0755
netfilter Folder 0755
netfilter_arp Folder 0755
netfilter_bridge Folder 0755
netfilter_ipv4 Folder 0755
netfilter_ipv6 Folder 0755
pcs Folder 0755
pds Folder 0755
perf Folder 0755
phy Folder 0755
pinctrl Folder 0755
platform_data Folder 0755
power Folder 0755
pse-pd Folder 0755
pwrseq Folder 0755
qat Folder 0755
qed Folder 0755
raid Folder 0755
regulator Folder 0755
remoteproc Folder 0755
reset Folder 0755
rpmsg Folder 0755
rtc Folder 0755
sched Folder 0755
soc Folder 0755
soundwire Folder 0755
spi Folder 0755
ssb Folder 0755
sunrpc Folder 0755
surface_aggregator Folder 0755
ulpi Folder 0755
unaligned Folder 0755
usb Folder 0755
8250_pci.h File 1.01 KB 0644
acct.h File 2.45 KB 0644
acpi.h File 44.88 KB 0644
acpi_amd_wbrf.h File 2.24 KB 0644
acpi_dma.h File 2.95 KB 0644
acpi_iort.h File 2.64 KB 0644
acpi_mdio.h File 819 B 0644
acpi_pmtmr.h File 1.02 KB 0644
acpi_viot.h File 478 B 0644
adb.h File 1.79 KB 0644
adfs_fs.h File 574 B 0644
adreno-smmu-priv.h File 3.15 KB 0644
adxl.h File 310 B 0644
aer.h File 1.49 KB 0644
agp_backend.h File 3.45 KB 0644
agpgart.h File 3.79 KB 0644
ahci-remap.h File 607 B 0644
ahci_platform.h File 1.81 KB 0644
aio.h File 570 B 0644
alarmtimer.h File 1.83 KB 0644
alcor_pci.h File 8.74 KB 0644
align.h File 552 B 0644
alloc_tag.h File 6.4 KB 0644
altera_jtaguart.h File 379 B 0644
altera_uart.h File 397 B 0644
amd-iommu.h File 2.12 KB 0644
amd-pmf-io.h File 1.58 KB 0644
anon_inodes.h File 1021 B 0644
aperture.h File 1.61 KB 0644
apm-emulation.h File 1.56 KB 0644
apm_bios.h File 2.25 KB 0644
apple-gmux.h File 4.63 KB 0644
arch_topology.h File 2.93 KB 0644
args.h File 1021 B 0644
arm-cci.h File 1.39 KB 0644
arm-smccc.h File 20.7 KB 0644
arm_ffa.h File 14.71 KB 0644
arm_sdei.h File 2.67 KB 0644
armada-37xx-rwtm-mailbox.h File 431 B 0644
array_size.h File 332 B 0644
ascii85.h File 555 B 0644
asn1.h File 1.79 KB 0644
asn1_ber_bytecode.h File 2.52 KB 0644
asn1_decoder.h File 493 B 0644
asn1_encoder.h File 983 B 0644
assoc_array.h File 2.88 KB 0644
assoc_array_priv.h File 5.3 KB 0644
async.h File 4.36 KB 0644
async_tx.h File 6.7 KB 0644
ata.h File 30.39 KB 0644
ata_platform.h File 755 B 0644
atalk.h File 4.45 KB 0644
atm.h File 287 B 0644
atm_tcp.h File 542 B 0644
atmdev.h File 10.17 KB 0644
atmel-isc-media.h File 2.07 KB 0644
atmel-ssc.h File 9.74 KB 0644
atmel_pdc.h File 1.26 KB 0644
atomic.h File 2.58 KB 0644
attribute_container.h File 2.47 KB 0644
audit.h File 20.48 KB 0644
audit_arch.h File 559 B 0644
auto_dev-ioctl.h File 296 B 0644
auto_fs.h File 278 B 0644
auxiliary_bus.h File 10.33 KB 0644
auxvec.h File 304 B 0644
average.h File 2.42 KB 0644
backing-dev-defs.h File 8.4 KB 0644
backing-dev.h File 10.41 KB 0644
backing-file.h File 1.51 KB 0644
backlight.h File 11.9 KB 0644
badblocks.h File 2.66 KB 0644
balloon_compaction.h File 6 KB 0644
base64.h File 370 B 0644
bcd.h File 683 B 0644
bch.h File 2.1 KB 0644
bcm47xx_nvram.h File 1.2 KB 0644
bcm47xx_sprom.h File 616 B 0644
bcm47xx_wdt.h File 555 B 0644
bcm963xx_nvram.h File 2.96 KB 0644
bcm963xx_tag.h File 3.6 KB 0644
binfmts.h File 4.63 KB 0644
bio-integrity.h File 4.16 KB 0644
bio.h File 18.01 KB 0644
bit_spinlock.h File 2.3 KB 0644
bitfield.h File 6.39 KB 0644
bitmap-str.h File 842 B 0644
bitmap.h File 29.11 KB 0644
bitops.h File 10.14 KB 0644
bitrev.h File 2.53 KB 0644
bits.h File 1.57 KB 0644
blk-cgroup.h File 1.53 KB 0644
blk-crypto-profile.h File 5.3 KB 0644
blk-crypto.h File 4.13 KB 0644
blk-integrity.h File 3.99 KB 0644
blk-mq.h File 33.72 KB 0644
blk-pm.h File 647 B 0644
blk_types.h File 15.31 KB 0644
blkdev.h File 49.82 KB 0644
blkpg.h File 436 B 0644
blktrace_api.h File 3.55 KB 0644
blockgroup_lock.h File 810 B 0644
bma150.h File 1.25 KB 0644
bootconfig.h File 9.27 KB 0644
bootmem_info.h File 2.04 KB 0644
bottom_half.h File 1013 B 0644
bpf-cgroup-defs.h File 2.07 KB 0644
bpf-cgroup.h File 18.4 KB 0644
bpf-netns.h File 1.41 KB 0644
bpf.h File 110.52 KB 0644
bpf_crypto.h File 865 B 0644
bpf_lirc.h File 698 B 0644
bpf_local_storage.h File 6.61 KB 0644
bpf_lsm.h File 2.01 KB 0644
bpf_mem_alloc.h File 2.05 KB 0644
bpf_mprog.h File 9.29 KB 0644
bpf_trace.h File 166 B 0644
bpf_types.h File 6.1 KB 0644
bpf_verifier.h File 33.06 KB 0644
bpfptr.h File 2.09 KB 0644
brcmphy.h File 21.77 KB 0644
bsearch.h File 624 B 0644
bsg-lib.h File 1.71 KB 0644
bsg.h File 499 B 0644
btf.h File 20.05 KB 0644
btf_ids.h File 8.18 KB 0644
btree-128.h File 2.67 KB 0644
btree-type.h File 3.9 KB 0644
btree.h File 6.84 KB 0644
btrfs.h File 145 B 0644
buffer_head.h File 17.37 KB 0644
bug.h File 2.33 KB 0644
build-salt.h File 375 B 0644
build_bug.h File 2.99 KB 0644
buildid.h File 671 B 0644
bvec.h File 7.54 KB 0644
c2port.h File 1.35 KB 0644
cache.h File 5.51 KB 0644
cacheflush.h File 675 B 0644
cacheinfo.h File 4.92 KB 0644
call_once.h File 1.67 KB 0644
capability.h File 6.27 KB 0644
cb710.h File 5.36 KB 0644
cc_platform.h File 3.42 KB 0644
cciss_ioctl.h File 1.03 KB 0644
ccp.h File 18.14 KB 0644
cdev.h File 845 B 0644
cdrom.h File 8.92 KB 0644
cfag12864b.h File 1.07 KB 0644
cfi.h File 1.23 KB 0644
cfi_types.h File 1.06 KB 0644
cgroup-defs.h File 26.77 KB 0644
cgroup.h File 26.33 KB 0644
cgroup_api.h File 26 B 0644
cgroup_dmem.h File 1.91 KB 0644
cgroup_rdma.h File 1.18 KB 0644
cgroup_refcnt.h File 2.59 KB 0644
cgroup_subsys.h File 1.28 KB 0644
circ_buf.h File 1.09 KB 0644
cleanup.h File 13.45 KB 0644
clk-provider.h File 65.77 KB 0644
clk.h File 36.18 KB 0644
clkdev.h File 1.2 KB 0644
clockchips.h File 7.29 KB 0644
clocksource.h File 11.01 KB 0644
clocksource_ids.h File 333 B 0644
closure.h File 14.22 KB 0644
cma.h File 2.26 KB 0644
cmpxchg-emu.h File 435 B 0644
cn_proc.h File 1.85 KB 0644
cnt32_to_63.h File 3.46 KB 0644
coda.h File 2.16 KB 0644
codetag.h File 3.4 KB 0644
compaction.h File 4.5 KB 0644
compat.h File 32.32 KB 0644
compiler-clang.h File 4.13 KB 0644
compiler-gcc.h File 3.92 KB 0644
compiler-version.h File 517 B 0644
compiler.h File 12.26 KB 0644
compiler_attributes.h File 15.91 KB 0644
compiler_types.h File 18.79 KB 0644
completion.h File 4.14 KB 0644
component.h File 4.35 KB 0644
configfs.h File 8.54 KB 0644
connector.h File 4.01 KB 0644
console.h File 24.18 KB 0644
console_struct.h File 6.98 KB 0644
consolemap.h File 1.25 KB 0644
const.h File 100 B 0644
container.h File 616 B 0644
container_of.h File 1.3 KB 0644
context_tracking.h File 4.4 KB 0644
context_tracking_irq.h File 633 B 0644
context_tracking_state.h File 3.8 KB 0644
cookie.h File 1.22 KB 0644
cordic.h File 2.08 KB 0644
coredump.h File 2.17 KB 0644
coresight-pmu.h File 2.32 KB 0644
coresight-stm.h File 152 B 0644
coresight.h File 22.68 KB 0644
count_zeros.h File 1.42 KB 0644
counter.h File 21.48 KB 0644
cper.h File 17.59 KB 0644
cpu.h File 6.67 KB 0644
cpu_cooling.h File 1.83 KB 0644
cpu_pm.h File 2.38 KB 0644
cpu_rmap.h File 1.7 KB 0644
cpu_smt.h File 1.12 KB 0644
cpufeature.h File 1.71 KB 0644
cpufreq.h File 36.37 KB 0644
cpuhotplug.h File 16.95 KB 0644
cpuhplock.h File 1.52 KB 0644
cpuidle.h File 11.42 KB 0644
cpuidle_haltpoll.h File 312 B 0644
cpumask.h File 37.26 KB 0644
cpumask_api.h File 27 B 0644
cpumask_types.h File 2.18 KB 0644
cpuset.h File 8.01 KB 0644
crash_core.h File 2.65 KB 0644
crash_dump.h File 6.29 KB 0644
crash_reserve.h File 1.33 KB 0644
crc-ccitt.h File 369 B 0644
crc-itu-t.h File 530 B 0644
crc-t10dif.h File 759 B 0644
crc16.h File 540 B 0644
crc32.h File 4.23 KB 0644
crc32c.h File 346 B 0644
crc32poly.h File 610 B 0644
crc4.h File 192 B 0644
crc64.h File 539 B 0644
crc7.h File 316 B 0644
crc8.h File 3.66 KB 0644
cred.h File 11.95 KB 0644
crypto.h File 19.01 KB 0644
cs5535.h File 6.13 KB 0644
ctype.h File 1.87 KB 0644
cuda.h File 620 B 0644
damon.h File 33.47 KB 0644
dasd_mod.h File 204 B 0644
davinci_emac.h File 1.05 KB 0644
dax.h File 8.75 KB 0644
dca.h File 1.88 KB 0644
dcache.h File 18.81 KB 0644
dccp.h File 10.74 KB 0644
debug_locks.h File 1.57 KB 0644
debugfs.h File 15.87 KB 0644
debugobjects.h File 4.09 KB 0644
delay.h File 4.18 KB 0644
delayacct.h File 7.08 KB 0644
delayed_call.h File 709 B 0644
dev_printk.h File 9.74 KB 0644
devcoredump.h File 3.53 KB 0644
devfreq-event.h File 5.95 KB 0644
devfreq.h File 14.52 KB 0644
devfreq_cooling.h File 2.7 KB 0644
device-mapper.h File 21.11 KB 0644
device.h File 43.19 KB 0644
device_cgroup.h File 1.57 KB 0644
devm-helpers.h File 2.67 KB 0644
devpts_fs.h File 1.13 KB 0644
dfl.h File 2.72 KB 0644
digsig.h File 1.18 KB 0644
dim.h File 12.69 KB 0644
dio.h File 10.77 KB 0644
dirent.h File 215 B 0644
dlm.h File 6.44 KB 0644
dlm_plock.h File 642 B 0644
dm-bufio.h File 5.16 KB 0644
dm-dirty-log.h File 4 KB 0644
dm-io.h File 2.03 KB 0644
dm-kcopyd.h File 3.03 KB 0644
dm-region-hash.h File 3.16 KB 0644
dm-verity-loadpin.h File 617 B 0644
dm9000.h File 987 B 0644
dma-buf.h File 21.21 KB 0644
dma-direct.h File 4.16 KB 0644
dma-direction.h File 407 B 0644
dma-fence-array.h File 2.86 KB 0644
dma-fence-chain.h File 3.66 KB 0644
dma-fence-unwrap.h File 2.24 KB 0644
dma-fence.h File 22.94 KB 0644
dma-heap.h File 1.13 KB 0644
dma-map-ops.h File 15.89 KB 0644
dma-mapping.h File 21.19 KB 0644
dma-resv.h File 16.94 KB 0644
dmaengine.h File 55.21 KB 0644
dmapool.h File 1.79 KB 0644
dmar.h File 8.06 KB 0644
dmi.h File 4.27 KB 0644
dnotify.h File 1012 B 0644
dns_resolver.h File 1.36 KB 0644
dpll.h File 6.78 KB 0644
dqblk_qtree.h File 2.19 KB 0644
dqblk_v1.h File 327 B 0644
dqblk_v2.h File 406 B 0644
drbd.h File 9.92 KB 0644
drbd_config.h File 285 B 0644
drbd_genl.h File 21.49 KB 0644
drbd_genl_api.h File 1.76 KB 0644
drbd_limits.h File 7.92 KB 0644
ds2782_battery.h File 158 B 0644
dtlk.h File 3.5 KB 0644
dtpm.h File 1.46 KB 0644
dw_apb_timer.h File 1.32 KB 0644
dynamic_debug.h File 10.96 KB 0644
dynamic_queue_limits.h File 5.43 KB 0644
earlycpio.h File 359 B 0644
ecryptfs.h File 3.82 KB 0644
edac.h File 19.44 KB 0644
edd.h File 1.05 KB 0644
eeprom_93cx6.h File 2.64 KB 0644
efi-bgrt.h File 644 B 0644
efi.h File 44.59 KB 0644
efi_embedded_fw.h File 1.04 KB 0644
efs_vh.h File 1.55 KB 0644
eisa.h File 2.97 KB 0644
elf-fdpic.h File 2.39 KB 0644
elf-randomize.h File 583 B 0644
elf.h File 2.97 KB 0644
elfcore-compat.h File 1.43 KB 0644
elfcore.h File 3.93 KB 0644
elfnote-lto.h File 314 B 0644
elfnote.h File 3.54 KB 0644
enclosure.h File 4.02 KB 0644
energy_model.h File 13.12 KB 0644
entry-common.h File 18.62 KB 0644
entry-kvm.h File 2.77 KB 0644
err.h File 3.35 KB 0644
errname.h File 283 B 0644
errno.h File 1.45 KB 0644
error-injection.h File 630 B 0644
errqueue.h File 524 B 0644
errseq.h File 382 B 0644
etherdevice.h File 19.37 KB 0644
ethtool.h File 52.71 KB 0644
ethtool_netlink.h File 3.74 KB 0644
eventfd.h File 2.1 KB 0644
eventpoll.h File 2.41 KB 0644
evm.h File 2.12 KB 0644
execmem.h File 5.72 KB 0644
export-internal.h File 2.3 KB 0644
export.h File 2.67 KB 0644
exportfs.h File 11.19 KB 0644
ext2_fs.h File 967 B 0644
extable.h File 1.28 KB 0644
extcon-provider.h File 3.83 KB 0644
extcon.h File 9.99 KB 0644
f2fs_fs.h File 20.26 KB 0644
f75375s.h File 541 B 0644
falloc.h File 1.79 KB 0644
fanotify.h File 4.99 KB 0644
fault-inject-usercopy.h File 496 B 0644
fault-inject.h File 3.07 KB 0644
fb.h File 30.04 KB 0644
fbcon.h File 2.09 KB 0644
fcdevice.h File 774 B 0644
fcntl.h File 1.66 KB 0644
fd.h File 490 B 0644
fddidevice.h File 833 B 0644
fdtable.h File 3.08 KB 0644
fec.h File 463 B 0644
fiemap.h File 831 B 0644
file.h File 3.66 KB 0644
file_ref.h File 5.46 KB 0644
fileattr.h File 1.9 KB 0644
filelock.h File 13.17 KB 0644
filter.h File 48.89 KB 0644
find.h File 20.71 KB 0644
fips.h File 303 B 0644
firewire.h File 17.27 KB 0644
firmware-map.h File 959 B 0644
firmware.h File 6.3 KB 0644
fixp-arith.h File 4.21 KB 0644
flat.h File 2.57 KB 0644
flex_proportions.h File 1.98 KB 0644
folio_queue.h File 9.99 KB 0644
font.h File 1.7 KB 0644
fortify-string.h File 28.64 KB 0644
fprobe.h File 3.92 KB 0644
fpu.h File 246 B 0644
freezer.h File 2.34 KB 0644
fs.h File 129.11 KB 0644
fs_api.h File 22 B 0644
fs_context.h File 8.36 KB 0644
fs_parser.h File 5.01 KB 0644
fs_pin.h File 539 B 0644
fs_stack.h File 895 B 0644
fs_struct.h File 1.04 KB 0644
fs_types.h File 2.02 KB 0644
fscache-cache.h File 7.09 KB 0644
fscache.h File 24.09 KB 0644
fscrypt.h File 34.57 KB 0644
fsi-occ.h File 715 B 0644
fsi-sbefifo.h File 629 B 0644
fsi.h File 2.27 KB 0644
fsl-diu-fb.h File 3.87 KB 0644
fsl_devices.h File 4.16 KB 0644
fsl_hypervisor.h File 2.76 KB 0644
fsl_ifc.h File 24.48 KB 0644
fsldma.h File 202 B 0644
fsnotify.h File 13.17 KB 0644
fsnotify_backend.h File 31.2 KB 0644
fsverity.h File 9.29 KB 0644
ftrace.h File 43.74 KB 0644
ftrace_irq.h File 884 B 0644
ftrace_regs.h File 1.31 KB 0644
futex.h File 2.44 KB 0644
fw_table.h File 1.75 KB 0644
fwnode.h File 7.81 KB 0644
fwnode_mdio.h File 858 B 0644
gameport.h File 5.24 KB 0644
gcd.h File 193 B 0644
genalloc.h File 7.68 KB 0644
generic-radix-tree.h File 11.43 KB 0644
genl_magic_func.h File 11.67 KB 0644
genl_magic_struct.h File 7.58 KB 0644
getcpu.h File 641 B 0644
gfp.h File 14.84 KB 0644
gfp_api.h File 23 B 0644
gfp_types.h File 16.57 KB 0644
glob.h File 256 B 0644
gnss.h File 1.56 KB 0644
goldfish.h File 878 B 0644
gpio-pxa.h File 571 B 0644
gpio.h File 5.01 KB 0644
gpio_keys.h File 1.81 KB 0644
greybus.h File 3.57 KB 0644
group_cpus.h File 310 B 0644
hardirq.h File 3.25 KB 0644
hash.h File 2.93 KB 0644
hashtable.h File 6.67 KB 0644
hashtable_api.h File 29 B 0644
hdlc.h File 3.19 KB 0644
hdlcdrv.h File 6.32 KB 0644
hdmi.h File 12.84 KB 0644
hex.h File 884 B 0644
hid-debug.h File 1.42 KB 0644
hid-over-i2c.h File 3.53 KB 0644
hid-over-spi.h File 4.91 KB 0644
hid-roccat.h File 490 B 0644
hid-sensor-hub.h File 8.97 KB 0644
hid-sensor-ids.h File 7.85 KB 0644
hid.h File 39.52 KB 0644
hid_bpf.h File 8.19 KB 0644
hidden.h File 966 B 0644
hiddev.h File 1.42 KB 0644
hidraw.h File 1.13 KB 0644
highmem-internal.h File 6.62 KB 0644
highmem.h File 18.61 KB 0644
highuid.h File 3.12 KB 0644
hil.h File 18.42 KB 0644
hil_mlc.h File 5.13 KB 0644
hippidevice.h File 1.08 KB 0644
hisi_acc_qm.h File 14.13 KB 0644
hmm.h File 3.93 KB 0644
host1x.h File 13.67 KB 0644
host1x_context_bus.h File 337 B 0644
hp_sdc.h File 14.01 KB 0644
hpet.h File 2.55 KB 0644
hrtimer.h File 11.36 KB 0644
hrtimer_api.h File 27 B 0644
hrtimer_defs.h File 4.22 KB 0644
hrtimer_types.h File 1.53 KB 0644
hte.h File 7.37 KB 0644
huge_mm.h File 18.87 KB 0644
hugetlb.h File 36.03 KB 0644
hugetlb_cgroup.h File 6.78 KB 0644
hugetlb_inline.h File 374 B 0644
hw_breakpoint.h File 4.19 KB 0644
hw_random.h File 2.23 KB 0644
hwmon-sysfs.h File 2.8 KB 0644
hwmon-vid.h File 862 B 0644
hwmon.h File 15.94 KB 0644
hwspinlock.h File 15.79 KB 0644
hyperv.h File 49.31 KB 0644
hypervisor.h File 748 B 0644
i2c-algo-bit.h File 1.4 KB 0644
i2c-algo-pca.h File 2.89 KB 0644
i2c-algo-pcf.h File 1.21 KB 0644
i2c-atr.h File 3.95 KB 0644
i2c-dev.h File 371 B 0644
i2c-mux.h File 1.61 KB 0644
i2c-of-prober.h File 4.94 KB 0644
i2c-smbus.h File 1.69 KB 0644
i2c.h File 39.67 KB 0644
i8042.h File 2.45 KB 0644
i8253.h File 808 B 0644
i8254.h File 489 B 0644
icmp.h File 1 KB 0644
icmpv6.h File 2.87 KB 0644
idle_inject.h File 1.02 KB 0644
idr.h File 9.72 KB 0644
ieee80211.h File 180.45 KB 0644
ieee802154.h File 14.46 KB 0644
if_arp.h File 1.81 KB 0644
if_bridge.h File 5.42 KB 0644
if_eql.h File 1.13 KB 0644
if_ether.h File 1.26 KB 0644
if_fddi.h File 3.24 KB 0644
if_hsr.h File 1.5 KB 0644
if_link.h File 592 B 0644
if_macvlan.h File 2.76 KB 0644
if_phonet.h File 319 B 0644
if_pppol2tp.h File 501 B 0644
if_pppox.h File 2.83 KB 0644
if_rmnet.h File 2.06 KB 0644
if_tap.h File 2.21 KB 0644
if_team.h File 7.94 KB 0644
if_tun.h File 1.54 KB 0644
if_tunnel.h File 409 B 0644
if_vlan.h File 22.16 KB 0644
igmp.h File 4.42 KB 0644
ihex.h File 2.15 KB 0644
ima.h File 2.71 KB 0644
imx-media.h File 605 B 0644
in.h File 2.29 KB 0644
in6.h File 1.63 KB 0644
indirect_call_wrapper.h File 2.24 KB 0644
inet.h File 2.64 KB 0644
inet_diag.h File 2.76 KB 0644
inetdevice.h File 9.53 KB 0644
init.h File 12 KB 0644
init_ohci1394_dma.h File 196 B 0644
init_syscalls.h File 1.01 KB 0644
init_task.h File 1.1 KB 0644
initrd.h File 1008 B 0644
inotify.h File 628 B 0644
input.h File 20.81 KB 0644
instruction_pointer.h File 346 B 0644
instrumentation.h File 1.85 KB 0644
instrumented.h File 6.21 KB 0644
int_log.h File 1.26 KB 0644
integrity.h File 1.46 KB 0644
intel-ish-client-if.h File 4.13 KB 0644
intel_rapl.h File 6 KB 0644
intel_tcc.h File 466 B 0644
intel_th.h File 2.44 KB 0644
intel_tpmi.h File 1.99 KB 0644
intel_vsec.h File 4.24 KB 0644
interconnect-clk.h File 648 B 0644
interconnect-provider.h File 5.53 KB 0644
interconnect.h File 3.36 KB 0644
interrupt.h File 27.29 KB 0644
interval_tree.h File 2.88 KB 0644
interval_tree_generic.h File 6.7 KB 0644
io-64-nonatomic-hi-lo.h File 2.41 KB 0644
io-64-nonatomic-lo-hi.h File 2.41 KB 0644
io-mapping.h File 4.69 KB 0644
io-pgtable.h File 10.18 KB 0644
io.h File 5.51 KB 0644
io_uring.h File 1.04 KB 0644
io_uring_types.h File 18.69 KB 0644
ioam6.h File 226 B 0644
ioam6_genl.h File 266 B 0644
ioam6_iptunnel.h File 285 B 0644
iocontext.h File 4.16 KB 0644
iomap.h File 15.6 KB 0644
iommu-dma.h File 2.98 KB 0644
iommu-helper.h File 1.12 KB 0644
iommu.h File 53.6 KB 0644
iommufd.h File 7.34 KB 0644
iopoll.h File 7.9 KB 0644
ioport.h File 15.09 KB 0644
ioprio.h File 2.17 KB 0644
ioremap.h File 744 B 0644
iosys-map.h File 16.8 KB 0644
iov_iter.h File 10.36 KB 0644
iova.h File 4.2 KB 0644
iova_bitmap.h File 1.31 KB 0644
ip.h File 1.56 KB 0644
ipack.h File 8.69 KB 0644
ipc.h File 619 B 0644
ipc_namespace.h File 5.63 KB 0644
ipmi.h File 11.09 KB 0644
ipmi_smi.h File 9.83 KB 0644
ipv6.h File 8.23 KB 0644
ipv6_route.h File 372 B 0644
irq.h File 43.49 KB 0644
irq_poll.h File 575 B 0644
irq_sim.h File 1.35 KB 0644
irq_work.h File 2.04 KB 0644
irqbypass.h File 3.45 KB 0644
irqchip.h File 2.65 KB 0644
irqdesc.h File 8.04 KB 0644
irqdomain.h File 24.75 KB 0644
irqdomain_defs.h File 842 B 0644
irqflags.h File 7.96 KB 0644
irqflags_types.h File 563 B 0644
irqhandler.h File 284 B 0644
irqnr.h File 1.5 KB 0644
irqreturn.h File 529 B 0644
isa-dma.h File 276 B 0644
isa.h File 3.33 KB 0644
isapnp.h File 2.88 KB 0644
iscsi_boot_sysfs.h File 3.71 KB 0644
iscsi_ibft.h File 994 B 0644
ism.h File 2.2 KB 0644
iversion.h File 10.96 KB 0644
jbd2.h File 51.56 KB 0644
jhash.h File 4.56 KB 0644
jiffies.h File 20.07 KB 0644
journal-head.h File 2.91 KB 0644
joystick.h File 437 B 0644
jump_label.h File 16.45 KB 0644
jump_label_ratelimit.h File 2.77 KB 0644
jz4740-adc.h File 1023 B 0644
jz4780-nemc.h File 976 B 0644
kallsyms.h File 4.26 KB 0644
kasan-checks.h File 1.46 KB 0644
kasan-enabled.h File 639 B 0644
kasan-tags.h File 487 B 0644
kasan.h File 20.56 KB 0644
kbd_diacr.h File 198 B 0644
kbd_kern.h File 3.6 KB 0644
kbuild.h File 380 B 0644
kconfig.h File 2.63 KB 0644
kcore.h File 611 B 0644
kcov.h File 4.31 KB 0644
kcsan-checks.h File 18.63 KB 0644
kcsan.h File 2.19 KB 0644
kdb.h File 7.36 KB 0644
kdebug.h File 487 B 0644
kdev_t.h File 1.8 KB 0644
kern_levels.h File 1.57 KB 0644
kernel-page-flags.h File 522 B 0644
kernel.h File 12.88 KB 0644
kernel_read_file.h File 1.62 KB 0644
kernel_stat.h File 3.63 KB 0644
kernelcapi.h File 1.45 KB 0644
kernfs.h File 19.49 KB 0644
kexec.h File 12.68 KB 0644
key-type.h File 6.63 KB 0644
key.h File 16.05 KB 0644
keyboard.h File 665 B 0644
keyctl.h File 1.25 KB 0644
kfence.h File 8.7 KB 0644
kfifo.h File 28.9 KB 0644
kgdb.h File 12.02 KB 0644
khugepaged.h File 1.78 KB 0644
klist.h File 1.88 KB 0644
kmemleak.h File 3.24 KB 0644
kmod.h File 1.02 KB 0644
kmsan-checks.h File 2.86 KB 0644
kmsan.h File 11.52 KB 0644
kmsan_string.h File 681 B 0644
kmsan_types.h File 906 B 0644
kmsg_dump.h File 3.12 KB 0644
kobj_map.h File 545 B 0644
kobject.h File 6.96 KB 0644
kobject_api.h File 27 B 0644
kobject_ns.h File 1.79 KB 0644
kprobes.h File 16.25 KB 0644
kref.h File 3.84 KB 0644
kref_api.h File 24 B 0644
ks0108.h File 970 B 0644
ks8842.h File 632 B 0644
ks8851_mll.h File 472 B 0644
ksm.h File 4.08 KB 0644
kstrtox.h File 6.51 KB 0644
kthread.h File 8.48 KB 0644
ktime.h File 5.4 KB 0644
ktime_api.h File 25 B 0644
kvm_dirty_ring.h File 2.68 KB 0644
kvm_host.h File 77.92 KB 0644
kvm_irqfd.h File 1.99 KB 0644
kvm_para.h File 402 B 0644
kvm_types.h File 2.6 KB 0644
l2tp.h File 261 B 0644
lantiq.h File 365 B 0644
lapb.h File 1.78 KB 0644
latencytop.h File 1.06 KB 0644
lcd.h File 4.18 KB 0644
lcm.h File 275 B 0644
led-class-flash.h File 6.08 KB 0644
led-class-multicolor.h File 2.44 KB 0644
led-lm3530.h File 3.7 KB 0644
leds-bd2802.h File 476 B 0644
leds-expresswire.h File 1.13 KB 0644
leds-lp3944.h File 950 B 0644
leds-lp3952.h File 2.35 KB 0644
leds-pca9532.h File 866 B 0644
leds-regulator.h File 1.14 KB 0644
leds-ti-lmu-common.h File 1.12 KB 0644
leds.h File 23.34 KB 0644
libata.h File 69.91 KB 0644
libfdt.h File 202 B 0644
libfdt_env.h File 491 B 0644
libgcc.h File 875 B 0644
libnvdimm.h File 9.93 KB 0644
libps2.h File 2.47 KB 0644
license.h File 418 B 0644
limits.h File 809 B 0644
linear_range.h File 2.01 KB 0644
linkage.h File 9.56 KB 0644
linkmode.h File 2.17 KB 0644
linux_logo.h File 1.81 KB 0644
lis3lv02d.h File 5 KB 0644
list.h File 35.12 KB 0644
list_bl.h File 4.79 KB 0644
list_lru.h File 9.8 KB 0644
list_nulls.h File 4.22 KB 0644
list_sort.h File 374 B 0644
litex.h File 2.06 KB 0644
livepatch.h File 8.26 KB 0644
livepatch_sched.h File 802 B 0644
llc.h File 749 B 0644
llist.h File 10.43 KB 0644
llist_api.h File 25 B 0644
local_lock.h File 1.98 KB 0644
local_lock_internal.h File 4.24 KB 0644
lockdep.h File 20.9 KB 0644
lockdep_api.h File 27 B 0644
lockdep_types.h File 7.61 KB 0644
lockref.h File 1.65 KB 0644
log2.h File 6.24 KB 0644
logic_iomem.h File 2.07 KB 0644
logic_pio.h File 3.11 KB 0644
lp.h File 2.76 KB 0644
lru_cache.h File 11.67 KB 0644
lsm_audit.h File 3.22 KB 0644
lsm_count.h File 2.36 KB 0644
lsm_hook_defs.h File 24.09 KB 0644
lsm_hooks.h File 4.81 KB 0644
lwq.h File 3.69 KB 0644
lz4.h File 26.69 KB 0644
lzo.h File 1.93 KB 0644
mISDNdsp.h File 1.19 KB 0644
mISDNhw.h File 5.39 KB 0644
mISDNif.h File 14.9 KB 0644
mailbox_client.h File 1.78 KB 0644
mailbox_controller.h File 5.7 KB 0644
map_benchmark.h File 1.07 KB 0644
maple.h File 2.68 KB 0644
maple_tree.h File 28.94 KB 0644
marvell_phy.h File 1.94 KB 0644
math.h File 6.31 KB 0644
math64.h File 9 KB 0644
mbcache.h File 2.09 KB 0644
mbus.h File 3.09 KB 0644
mc146818rtc.h File 4.72 KB 0644
mc6821.h File 1.18 KB 0644
mcb.h File 3.62 KB 0644
mdev.h File 2.36 KB 0644
mdio-bitbang.h File 1.46 KB 0644
mdio-gpio.h File 177 B 0644
mdio-mux.h File 1021 B 0644
mdio.h File 22.72 KB 0644
mei_aux.h File 929 B 0644
mei_cl_bus.h File 4.6 KB 0644
mem_encrypt.h File 1.31 KB 0644
memblock.h File 20.4 KB 0644
memcontrol.h File 45.83 KB 0644
memfd.h File 950 B 0644
memory-tiers.h File 3.94 KB 0644
memory.h File 6.42 KB 0644
memory_hotplug.h File 10.77 KB 0644
mempolicy.h File 7.25 KB 0644
mempool.h File 4.28 KB 0644
memregion.h File 1.8 KB 0644
memremap.h File 7.67 KB 0644
memstick.h File 9.61 KB 0644
mhi.h File 27.42 KB 0644
mhi_ep.h File 10.63 KB 0644
micrel_phy.h File 2.1 KB 0644
microchipphy.h File 2.65 KB 0644
migrate.h File 7.72 KB 0644
migrate_mode.h File 713 B 0644
mii.h File 15.51 KB 0644
mii_timestamper.h File 3.66 KB 0644
min_heap.h File 15.78 KB 0644
minmax.h File 10 KB 0644
misc_cgroup.h File 3.23 KB 0644
miscdevice.h File 3.21 KB 0644
mm.h File 126.61 KB 0644
mm_api.h File 22 B 0644
mm_inline.h File 17.38 KB 0644
mm_types.h File 51.72 KB 0644
mm_types_task.h File 2.32 KB 0644
mman.h File 5.48 KB 0644
mmap_lock.h File 6.03 KB 0644
mmdebug.h File 4.28 KB 0644
mmiotrace.h File 3.05 KB 0644
mmu_context.h File 1.13 KB 0644
mmu_notifier.h File 21.93 KB 0644
mmzone.h File 66.74 KB 0644
mnt_idmapping.h File 6.88 KB 0644
mnt_namespace.h File 767 B 0644
mod_devicetable.h File 25.41 KB 0644
module.h File 27.85 KB 0644
module_signature.h File 1.22 KB 0644
module_symbol.h File 409 B 0644
moduleloader.h File 3.84 KB 0644
moduleparam.h File 22.51 KB 0644
most.h File 12.2 KB 0644
mount.h File 4.21 KB 0644
moxtet.h File 2.27 KB 0644
mpage.h File 644 B 0644
mpi.h File 3.17 KB 0644
mpls.h File 394 B 0644
mpls_iptunnel.h File 178 B 0644
mroute.h File 2.12 KB 0644
mroute6.h File 2.93 KB 0644
mroute_base.h File 12.45 KB 0644
msdos_fs.h File 273 B 0644
msdos_partition.h File 1.62 KB 0644
msg.h File 395 B 0644
msi.h File 22.01 KB 0644
msi_api.h File 1.93 KB 0644
mtio.h File 1.29 KB 0644
mutex.h File 5.82 KB 0644
mutex_api.h File 25 B 0644
mutex_types.h File 2.09 KB 0644
mv643xx_eth.h File 2 KB 0644
mv643xx_i2c.h File 335 B 0644
mvebu-pmsu.h File 520 B 0644
mxm-wmi.h File 399 B 0644
namei.h File 5.46 KB 0644
nd.h File 6.19 KB 0644
ndctl.h File 674 B 0644
net.h File 11.86 KB 0644
net_tstamp.h File 2.97 KB 0644
netdev_features.h File 10.5 KB 0644
netdevice.h File 170.32 KB 0644
netdevice_xmit.h File 223 B 0644
netfilter.h File 14.03 KB 0644
netfilter_bridge.h File 2.08 KB 0644
netfilter_defs.h File 242 B 0644
netfilter_ipv4.h File 1.05 KB 0644
netfilter_ipv6.h File 5.86 KB 0644
netfilter_netdev.h File 3.97 KB 0644
netfs.h File 21.8 KB 0644
netlink.h File 10.69 KB 0644
netpoll.h File 2.52 KB 0644
nfs.h File 1.71 KB 0644
nfs3.h File 260 B 0644
nfs4.h File 24.25 KB 0644
nfs_common.h File 458 B 0644
nfs_fs.h File 20.45 KB 0644
nfs_fs_i.h File 308 B 0644
nfs_fs_sb.h File 11.34 KB 0644
nfs_iostat.h File 3.92 KB 0644
nfs_page.h File 8.48 KB 0644
nfs_ssc.h File 2.01 KB 0644
nfs_xdr.h File 43.3 KB 0644
nfsacl.h File 1.4 KB 0644
nfslocalio.h File 3.47 KB 0644
nitro_enclaves.h File 267 B 0644
nl802154.h File 3.87 KB 0644
nls.h File 3.09 KB 0644
nmi.h File 7.21 KB 0644
node.h File 4.67 KB 0644
nodemask.h File 17.89 KB 0644
nodemask_types.h File 263 B 0644
nospec.h File 2.24 KB 0644
notifier.h File 8.18 KB 0644
ns_common.h File 284 B 0644
nsc_gpio.h File 1.42 KB 0644
nsproxy.h File 3.67 KB 0644
ntb.h File 52.43 KB 0644
ntb_transport.h File 3.8 KB 0644
nubus.h File 5.54 KB 0644
numa.h File 1.6 KB 0644
numa_memblks.h File 1.57 KB 0644
nvme-auth.h File 1.44 KB 0644
nvme-fc-driver.h File 46.78 KB 0644
nvme-fc.h File 9.72 KB 0644
nvme-keyring.h File 732 B 0644
nvme-rdma.h File 2.31 KB 0644
nvme-tcp.h File 4.67 KB 0644
nvme.h File 50.91 KB 0644
nvmem-consumer.h File 6.87 KB 0644
nvmem-provider.h File 8.03 KB 0644
nvram.h File 3.47 KB 0644
oa_tc6.h File 947 B 0644
objagg.h File 1.94 KB 0644
objpool.h File 9.58 KB 0644
objtool.h File 6.62 KB 0644
objtool_types.h File 2.08 KB 0644
of.h File 51.38 KB 0644
of_address.h File 5.5 KB 0644
of_clk.h File 819 B 0644
of_device.h File 2.23 KB 0644
of_dma.h File 2.3 KB 0644
of_fdt.h File 3.48 KB 0644
of_gpio.h File 878 B 0644
of_graph.h File 5.4 KB 0644
of_iommu.h File 671 B 0644
of_irq.h File 3.83 KB 0644
of_mdio.h File 3.91 KB 0644
of_net.h File 1.15 KB 0644
of_pci.h File 915 B 0644
of_pdt.h File 1.14 KB 0644
of_platform.h File 4.07 KB 0644
of_reserved_mem.h File 2.22 KB 0644
oid_registry.h File 6.02 KB 0644
olpc-ec.h File 2 KB 0644
omap-dma.h File 9.54 KB 0644
omap-gpmc.h File 2.29 KB 0644
omap-iommu.h File 880 B 0644
omap-mailbox.h File 272 B 0644
omapfb.h File 576 B 0644
once.h File 2.66 KB 0644
once_lite.h File 926 B 0644
oom.h File 2.81 KB 0644
openvswitch.h File 403 B 0644
osq_lock.h File 912 B 0644
overflow.h File 14.82 KB 0644
packing.h File 16 KB 0644
padata.h File 6.21 KB 0644
page-flags-layout.h File 3.73 KB 0644
page-flags.h File 39.15 KB 0644
page-isolation.h File 1.04 KB 0644
page_counter.h File 3.21 KB 0644
page_ext.h File 2.9 KB 0644
page_frag_cache.h File 1.71 KB 0644
page_idle.h File 1.95 KB 0644
page_owner.h File 2.38 KB 0644
page_ref.h File 7.6 KB 0644
page_reporting.h File 895 B 0644
page_table_check.h File 3.74 KB 0644
pageblock-flags.h File 2.8 KB 0644
pagemap.h File 51.01 KB 0644
pagevec.h File 2.62 KB 0644
pagewalk.h File 7.36 KB 0644
panic.h File 2.83 KB 0644
panic_notifier.h File 296 B 0644
papr_scm.h File 2.17 KB 0644
parman.h File 2.87 KB 0644
parport.h File 18.87 KB 0644
parport_pc.h File 6.62 KB 0644
parser.h File 1.17 KB 0644
part_stat.h File 2.38 KB 0644
pata_arasan_cf_data.h File 1.22 KB 0644
patchkey.h File 757 B 0644
path.h File 752 B 0644
pch_dma.h File 408 B 0644
pci-acpi.h File 4.18 KB 0644
pci-ats.h File 2.01 KB 0644
pci-bwctrl.h File 650 B 0644
pci-doe.h File 576 B 0644
pci-ecam.h File 3.43 KB 0644
pci-ep-cfs.h File 956 B 0644
pci-epc.h File 12.02 KB 0644
pci-epf.h File 7.84 KB 0644
pci-p2pdma.h File 3.01 KB 0644
pci-pwrctrl.h File 1.74 KB 0644
pci-tph.h File 1.44 KB 0644
pci.h File 98.79 KB 0644
pci_hotplug.h File 4.35 KB 0644
pci_ids.h File 125.8 KB 0644
pcs-lynx.h File 442 B 0644
pcs-rzn1-miic.h File 385 B 0644
pe.h File 16.73 KB 0644
peci-cpu.h File 2.29 KB 0644
peci.h File 3.08 KB 0644
percpu-defs.h File 17.3 KB 0644
percpu-refcount.h File 11.22 KB 0644
percpu-rwsem.h File 4.32 KB 0644
percpu.h File 5.17 KB 0644
percpu_counter.h File 6.81 KB 0644
perf_event.h File 59.38 KB 0644
perf_event_api.h File 30 B 0644
perf_regs.h File 1.05 KB 0644
personality.h File 393 B 0644
pfn.h File 666 B 0644
pfn_t.h File 3.21 KB 0644
pgalloc_tag.h File 6.2 KB 0644
pgtable.h File 53.52 KB 0644
pgtable_api.h File 27 B 0644
phonet.h File 537 B 0644
phy.h File 77.74 KB 0644
phy_fixed.h File 1.82 KB 0644
phy_led_triggers.h File 1.01 KB 0644
phy_link_topology.h File 1.74 KB 0644
phylib_stubs.h File 2.64 KB 0644
phylink.h File 29.83 KB 0644
pid.h File 9.4 KB 0644
pid_namespace.h File 3.29 KB 0644
pid_types.h File 282 B 0644
pidfs.h File 356 B 0644
pim.h File 2.67 KB 0644
pipe_fs_i.h File 10.26 KB 0644
pkeys.h File 990 B 0644
pktcdvd.h File 5.7 KB 0644
pl320-ipc.h File 209 B 0644
platform_device.h File 13.15 KB 0644
platform_profile.h File 2.02 KB 0644
pldmfw.h File 4.91 KB 0644
plist.h File 8.58 KB 0644
plist_types.h File 315 B 0644
pm-trace.h File 940 B 0644
pm.h File 36.63 KB 0644
pm_clock.h File 2.59 KB 0644
pm_domain.h File 16.68 KB 0644
pm_opp.h File 18.9 KB 0644
pm_qos.h File 10.41 KB 0644
pm_runtime.h File 20.47 KB 0644
pm_wakeirq.h File 1009 B 0644
pm_wakeup.h File 7.43 KB 0644
pmbus.h File 2.86 KB 0644
pmu.h File 2.45 KB 0644
pnp.h File 14.98 KB 0644
poison.h File 2.84 KB 0644
poll.h File 3.86 KB 0644
polynomial.h File 814 B 0644
posix-clock.h File 4.52 KB 0644
posix-timers.h File 7.09 KB 0644
posix-timers_types.h File 2.21 KB 0644
posix_acl.h File 4.32 KB 0644
posix_acl_xattr.h File 1.95 KB 0644
power_supply.h File 41.09 KB 0644
powercap.h File 11.98 KB 0644
ppp-comp.h File 2.97 KB 0644
ppp_channel.h File 3.04 KB 0644
ppp_defs.h File 663 B 0644
pps_gen_kernel.h File 1.95 KB 0644
pps_kernel.h File 2.94 KB 0644
pr.h File 1.33 KB 0644
prandom.h File 1.31 KB 0644
preempt.h File 15.9 KB 0644
prefetch.h File 1.55 KB 0644
prime_numbers.h File 1.35 KB 0644
printk.h File 23.79 KB 0644
prmt.h File 342 B 0644
proc_fs.h File 9.13 KB 0644
proc_ns.h File 2.52 KB 0644
processor.h File 1.84 KB 0644
profile.h File 1.39 KB 0644
projid.h File 2.22 KB 0644
property.h File 19.91 KB 0644
pruss_driver.h File 4.44 KB 0644
psci.h File 1.52 KB 0644
pseudo_fs.h File 401 B 0644
psi.h File 1.78 KB 0644
psi_types.h File 4.94 KB 0644
psp-platform-access.h File 1.86 KB 0644
psp-sev.h File 27.29 KB 0644
psp-tee.h File 2.65 KB 0644
psp.h File 697 B 0644
pstore.h File 7.77 KB 0644
pstore_blk.h File 1.53 KB 0644
pstore_ram.h File 883 B 0644
pstore_zone.h File 2.28 KB 0644
ptdump.h File 815 B 0644
pti.h File 251 B 0644
ptp_classify.h File 6.89 KB 0644
ptp_clock_kernel.h File 16.23 KB 0644
ptp_kvm.h File 505 B 0644
ptp_mock.h File 670 B 0644
ptp_pch.h File 666 B 0644
ptr_ring.h File 16.54 KB 0644
ptrace.h File 16.79 KB 0644
ptrace_api.h File 26 B 0644
purgatory.h File 590 B 0644
pvclock_gtod.h File 548 B 0644
pwm.h File 18.78 KB 0644
pwm_backlight.h File 649 B 0644
pxa168_eth.h File 728 B 0644
pxa2xx_ssp.h File 11.13 KB 0644
qnx6_fs.h File 3.27 KB 0644
quota.h File 18.76 KB 0644
quotaops.h File 10.27 KB 0644
radix-tree.h File 15.95 KB 0644
raid_class.h File 2.01 KB 0644
ramfs.h File 746 B 0644
random.h File 4.97 KB 0644
randomize_kstack.h File 3.96 KB 0644
range.h File 1.07 KB 0644
ras.h File 1.53 KB 0644
ratelimit.h File 1.72 KB 0644
ratelimit_types.h File 1.33 KB 0644
rational.h File 639 B 0644
rbtree.h File 11.32 KB 0644
rbtree_augmented.h File 10.18 KB 0644
rbtree_latch.h File 6.73 KB 0644
rbtree_types.h File 946 B 0644
rcu_node_tree.h File 3.73 KB 0644
rcu_notifier.h File 1.09 KB 0644
rcu_segcblist.h File 10.77 KB 0644
rcu_sync.h File 1.41 KB 0644
rculist.h File 30.59 KB 0644
rculist_bl.h File 3.29 KB 0644
rculist_nulls.h File 6.6 KB 0644
rcupdate.h File 42.48 KB 0644
rcupdate_trace.h File 3.27 KB 0644
rcupdate_wait.h File 2.55 KB 0644
rcuref.h File 4.66 KB 0644
rcutiny.h File 4.55 KB 0644
rcutree.h File 4.34 KB 0644
rcuwait.h File 2.32 KB 0644
rcuwait_api.h File 27 B 0644
reboot-mode.h File 600 B 0644
reboot.h File 5.3 KB 0644
reciprocal_div.h File 3.28 KB 0644
ref_tracker.h File 2.35 KB 0644
refcount.h File 11.83 KB 0644
refcount_api.h File 28 B 0644
refcount_types.h File 512 B 0644
regmap.h File 72.65 KB 0644
regset.h File 11.35 KB 0644
relay.h File 8.47 KB 0644
remoteproc.h File 25.08 KB 0644
resctrl.h File 11.58 KB 0644
reset-controller.h File 3.79 KB 0644
reset.h File 37.86 KB 0644
resource.h File 223 B 0644
resource_ext.h File 2.08 KB 0644
restart_block.h File 1.11 KB 0644
resume_user_mode.h File 1.88 KB 0644
rethook.h File 3.15 KB 0644
rfkill.h File 10.79 KB 0644
rhashtable-types.h File 3.72 KB 0644
rhashtable.h File 37.93 KB 0644
ring_buffer.h File 8.82 KB 0644
rio.h File 19.02 KB 0644
rio_drv.h File 14.32 KB 0644
rio_ids.h File 723 B 0644
rio_regs.h File 19.07 KB 0644
rmap.h File 25.2 KB 0644
rmi.h File 12.04 KB 0644
rndis.h File 16.86 KB 0644
rodata_test.h File 394 B 0644
rolling_buffer.h File 2.16 KB 0644
root_dev.h File 361 B 0644
rpmb.h File 3.16 KB 0644
rpmsg.h File 9.46 KB 0644
rseq.h File 2.99 KB 0644
rslib.h File 3.64 KB 0644
rtc.h File 9.32 KB 0644
rtmutex.h File 3.38 KB 0644
rtnetlink.h File 7.36 KB 0644
rtsx_common.h File 846 B 0644
rtsx_pci.h File 40.09 KB 0644
rtsx_usb.h File 15.51 KB 0644
rv.h File 1.56 KB 0644
rw_hint.h File 702 B 0644
rwbase_rt.h File 1 KB 0644
rwlock.h File 4.15 KB 0644
rwlock_api_smp.h File 7.85 KB 0644
rwlock_rt.h File 3.38 KB 0644
rwlock_types.h File 1.77 KB 0644
rwsem.h File 8.6 KB 0644
sbitmap.h File 17.82 KB 0644
scatterlist.h File 21.17 KB 0644
scc.h File 2.84 KB 0644
sched.h File 64.53 KB 0644
sched_clock.h File 1.46 KB 0644
scmi_imx_protocol.h File 1.54 KB 0644
scmi_protocol.h File 38.75 KB 0644
scpi_protocol.h File 2.67 KB 0644
screen_info.h File 3.35 KB 0644
scs.h File 2.25 KB 0644
sctp.h File 23.09 KB 0644
scx200.h File 1.82 KB 0644
scx200_gpio.h File 2.38 KB 0644
seccomp.h File 2.99 KB 0644
seccomp_types.h File 834 B 0644
secretmem.h File 706 B 0644
securebits.h File 239 B 0644
security.h File 64.62 KB 0644
sed-opal-key.h File 614 B 0644
sed-opal.h File 1.95 KB 0644
seg6.h File 121 B 0644
seg6_genl.h File 136 B 0644
seg6_hmac.h File 136 B 0644
seg6_iptunnel.h File 148 B 0644
seg6_local.h File 100 B 0644
selection.h File 1.67 KB 0644
sem.h File 515 B 0644
sem_types.h File 234 B 0644
semaphore.h File 1.58 KB 0644
seq_buf.h File 4.24 KB 0644
seq_file.h File 10.18 KB 0644
seq_file_net.h File 787 B 0644
seqlock.h File 37.14 KB 0644
seqlock_api.h File 27 B 0644
seqlock_types.h File 3.11 KB 0644
serdev.h File 10.12 KB 0644
serial.h File 1.03 KB 0644
serial_8250.h File 7.38 KB 0644
serial_bcm63xx.h File 4.73 KB 0644
serial_core.h File 39.9 KB 0644
serial_s3c.h File 9.54 KB 0644
serial_sci.h File 1.62 KB 0644
serio.h File 4.41 KB 0644
set_memory.h File 2.06 KB 0644
sfp.h File 16.54 KB 0644
sh_clk.h File 5.96 KB 0644
sh_dma.h File 3.47 KB 0644
sh_eth.h File 369 B 0644
sh_intc.h File 3.63 KB 0644
sh_timer.h File 172 B 0644
shdma-base.h File 4.27 KB 0644
shm.h File 835 B 0644
shmem_fs.h File 7.74 KB 0644
shrinker.h File 4.87 KB 0644
signal.h File 13.79 KB 0644
signal_types.h File 1.69 KB 0644
signalfd.h File 817 B 0644
siox.h File 2.26 KB 0644
siphash.h File 5.66 KB 0644
sizes.h File 1.68 KB 0644
skb_array.h File 5.43 KB 0644
skbuff.h File 148.33 KB 0644
skbuff_ref.h File 1.74 KB 0644
skmsg.h File 13.94 KB 0644
slab.h File 37.02 KB 0644
slimbus.h File 6.94 KB 0644
sm501-regs.h File 11.62 KB 0644
sm501.h File 4.02 KB 0644
smc91x.h File 1.57 KB 0644
smp.h File 8.03 KB 0644
smp_types.h File 1.35 KB 0644
smpboot.h File 1.68 KB 0644
smsc911x.h File 1.63 KB 0644
smscphy.h File 3.1 KB 0644
sock_diag.h File 2.42 KB 0644
socket.h File 15.52 KB 0644
sockptr.h File 4.05 KB 0644
softirq.h File 29 B 0644
sonet.h File 469 B 0644
sony-laptop.h File 1.41 KB 0644
sonypi.h File 1.71 KB 0644
sort.h File 348 B 0644
sound.h File 685 B 0644
soundcard.h File 1.59 KB 0644
spinlock.h File 17.55 KB 0644
spinlock_api.h File 28 B 0644
spinlock_api_smp.h File 5.23 KB 0644
spinlock_api_up.h File 3.38 KB 0644
spinlock_rt.h File 4.12 KB 0644
spinlock_types.h File 1.78 KB 0644
spinlock_types_raw.h File 1.69 KB 0644
spinlock_types_up.h File 732 B 0644
spinlock_up.h File 2.08 KB 0644
splice.h File 3.72 KB 0644
spmi.h File 5.85 KB 0644
sprintf.h File 1.24 KB 0644
sram.h File 437 B 0644
srcu.h File 15.35 KB 0644
srcutiny.h File 3.15 KB 0644
srcutree.h File 10.6 KB 0644
ssbi.h File 726 B 0644
stackdepot.h File 8.95 KB 0644
stackleak.h File 2.36 KB 0644
stackprotector.h File 859 B 0644
stacktrace.h File 4 KB 0644
start_kernel.h File 345 B 0644
stat.h File 1.82 KB 0644
statfs.h File 1.78 KB 0644
static_call.h File 10.66 KB 0644
static_call_types.h File 2.74 KB 0644
static_key.h File 30 B 0644
stdarg.h File 313 B 0644
stddef.h File 3.17 KB 0644
stm.h File 4.6 KB 0644
stmmac.h File 7.79 KB 0644
stmp3xxx_rtc_wdt.h File 331 B 0644
stmp_device.h File 412 B 0644
stop_machine.h File 4.94 KB 0644
string.h File 17.88 KB 0644
string_choices.h File 2.22 KB 0644
string_helpers.h File 3.29 KB 0644
stringhash.h File 2.65 KB 0644
stringify.h File 395 B 0644
sungem_phy.h File 3.97 KB 0644
sunserialcore.h File 1.08 KB 0644
sunxi-rsb.h File 2.89 KB 0644
surface_acpi_notify.h File 1.07 KB 0644
suspend.h File 20.63 KB 0644
svga.h File 3.75 KB 0644
sw842.h File 328 B 0644
swab.h File 912 B 0644
swait.h File 9.47 KB 0644
swait_api.h File 25 B 0644
swap.h File 21.47 KB 0644
swap_cgroup.h File 1004 B 0644
swap_slots.h File 721 B 0644
swapfile.h File 450 B 0644
swapops.h File 16.33 KB 0644
swiotlb.h File 9.09 KB 0644
switchtec.h File 10.92 KB 0644
sxgbe_platform.h File 1.23 KB 0644
sync_core.h File 1.03 KB 0644
sync_file.h File 1.57 KB 0644
synclink.h File 989 B 0644
sys.h File 960 B 0644
sys_soc.h File 1.26 KB 0644
syscall_user_dispatch.h File 1.31 KB 0644
syscall_user_dispatch_types.h File 388 B 0644
syscalls.h File 56.4 KB 0644
syscalls_api.h File 28 B 0644
syscore_ops.h File 633 B 0644
sysctl.h File 9.6 KB 0644
sysfb.h File 2.87 KB 0644
sysfs.h File 24.5 KB 0644
syslog.h File 1.29 KB 0644
sysrq.h File 1.95 KB 0644
sysv_fs.h File 9.03 KB 0644
t10-pi.h File 1.85 KB 0644
task_io_accounting.h File 1.13 KB 0644
task_io_accounting_ops.h File 2.55 KB 0644
task_work.h File 1.06 KB 0644
taskstats_kern.h File 957 B 0644
tboot.h File 3.26 KB 0644
tc.h File 3.46 KB 0644
tca6416_keypad.h File 683 B 0644
tcp.h File 20.67 KB 0644
tee_core.h File 9.67 KB 0644
tee_drv.h File 8.94 KB 0644
tegra-icc.h File 1.86 KB 0644
termios_internal.h File 1.48 KB 0644
text-patching.h File 349 B 0644
textsearch.h File 4.73 KB 0644
textsearch_fsm.h File 1.19 KB 0644
tfrc.h File 1.68 KB 0644
thermal.h File 11.63 KB 0644
thread_info.h File 7.75 KB 0644
threads.h File 1.31 KB 0644
thunderbolt.h File 21.38 KB 0644
ti-emif-sram.h File 4.75 KB 0644
ti_wilink_st.h File 13.47 KB 0644
tick.h File 9.89 KB 0644
tifm.h File 4.66 KB 0644
timb_dma.h File 1.17 KB 0644
timb_gpio.h File 717 B 0644
time.h File 3.14 KB 0644
time32.h File 1.75 KB 0644
time64.h File 4.68 KB 0644
time_namespace.h File 4.02 KB 0644
timecounter.h File 4.38 KB 0644
timekeeper_internal.h File 5.72 KB 0644
timekeeping.h File 8.82 KB 0644
timer.h File 7.4 KB 0644
timer_types.h File 477 B 0644
timerfd.h File 508 B 0644
timeriomem-rng.h File 432 B 0644
timerqueue.h File 1.18 KB 0644
timerqueue_types.h File 335 B 0644
timex.h File 6.41 KB 0644
tnum.h File 4.15 KB 0644
topology.h File 7.33 KB 0644
torture.h File 4.91 KB 0644
toshiba.h File 460 B 0644
tpm.h File 14.74 KB 0644
tpm_command.h File 847 B 0644
tpm_eventlog.h File 6.53 KB 0644
trace.h File 2.77 KB 0644
trace_clock.h File 667 B 0644
trace_events.h File 30.39 KB 0644
trace_recursion.h File 5 KB 0644
trace_seq.h File 4.52 KB 0644
tracefs.h File 3.79 KB 0644
tracepoint-defs.h File 2.46 KB 0644
tracepoint.h File 20.39 KB 0644
transport_class.h File 2.58 KB 0644
ts-nbus.h File 532 B 0644
tsacct_kern.h File 1.2 KB 0644
tsm.h File 3.78 KB 0644
tty.h File 17.21 KB 0644
tty_buffer.h File 1.29 KB 0644
tty_driver.h File 22.2 KB 0644
tty_flip.h File 2.68 KB 0644
tty_ldisc.h File 10.29 KB 0644
tty_port.h File 9.21 KB 0644
turris-omnia-mcu-interface.h File 11.13 KB 0644
typecheck.h File 782 B 0644
types.h File 6.04 KB 0644
u64_stats_sync.h File 5.45 KB 0644
u64_stats_sync_api.h File 34 B 0644
uacce.h File 4.37 KB 0644
uaccess.h File 18.83 KB 0644
ubsan.h File 307 B 0644
ucs2_string.h File 740 B 0644
udp.h File 6.09 KB 0644
uidgid.h File 4.27 KB 0644
uidgid_types.h File 241 B 0644
uio.h File 12.13 KB 0644
uio_driver.h File 5.25 KB 0644
umh.h File 1.82 KB 0644
unaligned.h File 3.14 KB 0644
unicode.h File 2.05 KB 0644
union_find.h File 1.14 KB 0644
units.h File 2.88 KB 0644
unroll.h File 1.77 KB 0644
uprobes.h File 9.44 KB 0644
usb.h File 78.94 KB 0644
usb_usual.h File 3.58 KB 0644
usbdevice_fs.h File 2.18 KB 0644
user-return-notifier.h File 1.18 KB 0644
user.h File 22 B 0644
user_events.h File 1.68 KB 0644
user_namespace.h File 6.42 KB 0644
userfaultfd_k.h File 13.22 KB 0644
usermode_driver.h File 515 B 0644
util_macros.h File 2.51 KB 0644
uts.h File 388 B 0644
utsname.h File 1.8 KB 0644
uuid.h File 2.49 KB 0644
vbox_utils.h File 1.75 KB 0644
vdpa.h File 22.11 KB 0644
verification.h File 1.86 KB 0644
vermagic.h File 1.24 KB 0644
vexpress.h File 297 B 0644
vfio.h File 13.34 KB 0644
vfio_pci_core.h File 5.59 KB 0644
vfs.h File 116 B 0644
vga_switcheroo.h File 8.62 KB 0644
vgaarb.h File 2.81 KB 0644
vhost_iotlb.h File 1.43 KB 0644
via-core.h File 6.57 KB 0644
via.h File 932 B 0644
via_i2c.h File 844 B 0644
videodev2.h File 2.7 KB 0644
virtio.h File 10.57 KB 0644
virtio_anchor.h File 507 B 0644
virtio_byteorder.h File 1.46 KB 0644
virtio_caif.h File 513 B 0644
virtio_config.h File 18.11 KB 0644
virtio_dma_buf.h File 1.12 KB 0644
virtio_net.h File 6.53 KB 0644
virtio_pci_admin.h File 1.47 KB 0644
virtio_pci_legacy.h File 1.37 KB 0644
virtio_pci_modern.h File 4.39 KB 0644
virtio_ring.h File 3.2 KB 0644
virtio_vsock.h File 7.44 KB 0644
vm_event_item.h File 4.29 KB 0644
vmalloc.h File 10.61 KB 0644
vmcore_info.h File 3.08 KB 0644
vmpressure.h File 1.68 KB 0644
vmstat.h File 16.78 KB 0644
vmw_vmci_api.h File 2.88 KB 0644
vmw_vmci_defs.h File 29.93 KB 0644
vringh.h File 9.35 KB 0644
vt.h File 611 B 0644
vt_buffer.h File 1.13 KB 0644
vt_kern.h File 5.32 KB 0644
vtime.h File 4.47 KB 0644
w1.h File 8.93 KB 0644
wait.h File 43.03 KB 0644
wait_api.h File 24 B 0644
wait_bit.h File 22.51 KB 0644
watch_queue.h File 3.83 KB 0644
watchdog.h File 8.21 KB 0644
win_minmax.h File 831 B 0644
wireless.h File 1.56 KB 0644
wkup_m3_ipc.h File 1.58 KB 0644
wm97xx.h File 10.44 KB 0644
wmi.h File 3.36 KB 0644
wordpart.h File 1.5 KB 0644
workqueue.h File 29.84 KB 0644
workqueue_api.h File 29 B 0644
workqueue_types.h File 564 B 0644
writeback.h File 12.67 KB 0644
ww_mutex.h File 13.38 KB 0644
wwan.h File 6 KB 0644
xarray.h File 58.06 KB 0644
xattr.h File 4.5 KB 0644
xxhash.h File 8.27 KB 0644
xz.h File 15.66 KB 0644
yam.h File 2.18 KB 0644
zconf.h File 1.73 KB 0644
zlib.h File 28.11 KB 0644
zorro.h File 3.57 KB 0644
zpool.h File 2.84 KB 0644
zsmalloc.h File 1.71 KB 0644
zstd.h File 22.47 KB 0644
zstd_errors.h File 3.09 KB 0644
zstd_lib.h File 144.05 KB 0644
zswap.h File 1.82 KB 0644
zutil.h File 2.73 KB 0644
Filemanager