forked from luck/tmp_suning_uos_patched
ata: move sata_scr_*() to libata-sata.c
* move sata_scr_*() to libata-sata.c * add static inlines for CONFIG_SATA_HOST=n case Code size savings on m68k arch using (modified) atari_defconfig: text data bss dec hex filename before: 35642 572 40 36254 8d9e drivers/ata/libata-core.o 16607 18 0 16625 40f1 drivers/ata/libata-eh.o after: 32846 572 40 33458 82b2 drivers/ata/libata-core.o 16243 18 0 16261 3f85 drivers/ata/libata-eh.o Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
7fe183c773
commit
6eab1bc0ee
|
@ -5215,115 +5215,6 @@ void ata_qc_issue(struct ata_queued_cmd *qc)
|
|||
ata_qc_complete(qc);
|
||||
}
|
||||
|
||||
/**
|
||||
* sata_scr_valid - test whether SCRs are accessible
|
||||
* @link: ATA link to test SCR accessibility for
|
||||
*
|
||||
* Test whether SCRs are accessible for @link.
|
||||
*
|
||||
* LOCKING:
|
||||
* None.
|
||||
*
|
||||
* RETURNS:
|
||||
* 1 if SCRs are accessible, 0 otherwise.
|
||||
*/
|
||||
int sata_scr_valid(struct ata_link *link)
|
||||
{
|
||||
struct ata_port *ap = link->ap;
|
||||
|
||||
return (ap->flags & ATA_FLAG_SATA) && ap->ops->scr_read;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sata_scr_valid);
|
||||
|
||||
/**
|
||||
* sata_scr_read - read SCR register of the specified port
|
||||
* @link: ATA link to read SCR for
|
||||
* @reg: SCR to read
|
||||
* @val: Place to store read value
|
||||
*
|
||||
* Read SCR register @reg of @link into *@val. This function is
|
||||
* guaranteed to succeed if @link is ap->link, the cable type of
|
||||
* the port is SATA and the port implements ->scr_read.
|
||||
*
|
||||
* LOCKING:
|
||||
* None if @link is ap->link. Kernel thread context otherwise.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, negative errno on failure.
|
||||
*/
|
||||
int sata_scr_read(struct ata_link *link, int reg, u32 *val)
|
||||
{
|
||||
if (ata_is_host_link(link)) {
|
||||
if (sata_scr_valid(link))
|
||||
return link->ap->ops->scr_read(link, reg, val);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return sata_pmp_scr_read(link, reg, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sata_scr_read);
|
||||
|
||||
/**
|
||||
* sata_scr_write - write SCR register of the specified port
|
||||
* @link: ATA link to write SCR for
|
||||
* @reg: SCR to write
|
||||
* @val: value to write
|
||||
*
|
||||
* Write @val to SCR register @reg of @link. This function is
|
||||
* guaranteed to succeed if @link is ap->link, the cable type of
|
||||
* the port is SATA and the port implements ->scr_read.
|
||||
*
|
||||
* LOCKING:
|
||||
* None if @link is ap->link. Kernel thread context otherwise.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, negative errno on failure.
|
||||
*/
|
||||
int sata_scr_write(struct ata_link *link, int reg, u32 val)
|
||||
{
|
||||
if (ata_is_host_link(link)) {
|
||||
if (sata_scr_valid(link))
|
||||
return link->ap->ops->scr_write(link, reg, val);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return sata_pmp_scr_write(link, reg, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sata_scr_write);
|
||||
|
||||
/**
|
||||
* sata_scr_write_flush - write SCR register of the specified port and flush
|
||||
* @link: ATA link to write SCR for
|
||||
* @reg: SCR to write
|
||||
* @val: value to write
|
||||
*
|
||||
* This function is identical to sata_scr_write() except that this
|
||||
* function performs flush after writing to the register.
|
||||
*
|
||||
* LOCKING:
|
||||
* None if @link is ap->link. Kernel thread context otherwise.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, negative errno on failure.
|
||||
*/
|
||||
int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)
|
||||
{
|
||||
if (ata_is_host_link(link)) {
|
||||
int rc;
|
||||
|
||||
if (sata_scr_valid(link)) {
|
||||
rc = link->ap->ops->scr_write(link, reg, val);
|
||||
if (rc == 0)
|
||||
rc = link->ap->ops->scr_read(link, reg, &val);
|
||||
return rc;
|
||||
}
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return sata_pmp_scr_write(link, reg, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sata_scr_write_flush);
|
||||
|
||||
/**
|
||||
* ata_phys_link_online - test whether the given link is online
|
||||
* @link: ATA link to test
|
||||
|
|
|
@ -12,6 +12,115 @@
|
|||
|
||||
#include "libata.h"
|
||||
|
||||
/**
|
||||
* sata_scr_valid - test whether SCRs are accessible
|
||||
* @link: ATA link to test SCR accessibility for
|
||||
*
|
||||
* Test whether SCRs are accessible for @link.
|
||||
*
|
||||
* LOCKING:
|
||||
* None.
|
||||
*
|
||||
* RETURNS:
|
||||
* 1 if SCRs are accessible, 0 otherwise.
|
||||
*/
|
||||
int sata_scr_valid(struct ata_link *link)
|
||||
{
|
||||
struct ata_port *ap = link->ap;
|
||||
|
||||
return (ap->flags & ATA_FLAG_SATA) && ap->ops->scr_read;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sata_scr_valid);
|
||||
|
||||
/**
|
||||
* sata_scr_read - read SCR register of the specified port
|
||||
* @link: ATA link to read SCR for
|
||||
* @reg: SCR to read
|
||||
* @val: Place to store read value
|
||||
*
|
||||
* Read SCR register @reg of @link into *@val. This function is
|
||||
* guaranteed to succeed if @link is ap->link, the cable type of
|
||||
* the port is SATA and the port implements ->scr_read.
|
||||
*
|
||||
* LOCKING:
|
||||
* None if @link is ap->link. Kernel thread context otherwise.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, negative errno on failure.
|
||||
*/
|
||||
int sata_scr_read(struct ata_link *link, int reg, u32 *val)
|
||||
{
|
||||
if (ata_is_host_link(link)) {
|
||||
if (sata_scr_valid(link))
|
||||
return link->ap->ops->scr_read(link, reg, val);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return sata_pmp_scr_read(link, reg, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sata_scr_read);
|
||||
|
||||
/**
|
||||
* sata_scr_write - write SCR register of the specified port
|
||||
* @link: ATA link to write SCR for
|
||||
* @reg: SCR to write
|
||||
* @val: value to write
|
||||
*
|
||||
* Write @val to SCR register @reg of @link. This function is
|
||||
* guaranteed to succeed if @link is ap->link, the cable type of
|
||||
* the port is SATA and the port implements ->scr_read.
|
||||
*
|
||||
* LOCKING:
|
||||
* None if @link is ap->link. Kernel thread context otherwise.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, negative errno on failure.
|
||||
*/
|
||||
int sata_scr_write(struct ata_link *link, int reg, u32 val)
|
||||
{
|
||||
if (ata_is_host_link(link)) {
|
||||
if (sata_scr_valid(link))
|
||||
return link->ap->ops->scr_write(link, reg, val);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return sata_pmp_scr_write(link, reg, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sata_scr_write);
|
||||
|
||||
/**
|
||||
* sata_scr_write_flush - write SCR register of the specified port and flush
|
||||
* @link: ATA link to write SCR for
|
||||
* @reg: SCR to write
|
||||
* @val: value to write
|
||||
*
|
||||
* This function is identical to sata_scr_write() except that this
|
||||
* function performs flush after writing to the register.
|
||||
*
|
||||
* LOCKING:
|
||||
* None if @link is ap->link. Kernel thread context otherwise.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, negative errno on failure.
|
||||
*/
|
||||
int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)
|
||||
{
|
||||
if (ata_is_host_link(link)) {
|
||||
int rc;
|
||||
|
||||
if (sata_scr_valid(link)) {
|
||||
rc = link->ap->ops->scr_write(link, reg, val);
|
||||
if (rc == 0)
|
||||
rc = link->ap->ops->scr_read(link, reg, &val);
|
||||
return rc;
|
||||
}
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return sata_pmp_scr_write(link, reg, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sata_scr_write_flush);
|
||||
|
||||
/**
|
||||
* ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure
|
||||
* @tf: Taskfile to convert
|
||||
|
|
|
@ -1125,10 +1125,6 @@ extern void ata_sas_tport_delete(struct ata_port *ap);
|
|||
extern void ata_sas_port_stop(struct ata_port *ap);
|
||||
extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);
|
||||
extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap);
|
||||
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 bool ata_link_online(struct ata_link *link);
|
||||
extern bool ata_link_offline(struct ata_link *link);
|
||||
#ifdef CONFIG_PM
|
||||
|
@ -1193,6 +1189,26 @@ extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *
|
|||
/*
|
||||
* SATA specific code - drivers/ata/libata-sata.c
|
||||
*/
|
||||
#ifdef CONFIG_SATA_HOST
|
||||
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);
|
||||
#else
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user