common: cmd_ide: use __weak and add prototypes
clang chokes about the concept of having an alias to an always_inlined function. gcc likely just ignores the always inlined since binary sizes are equal before and after this patch. Convert the aliases to weak functions and provide missing prototypes. cc: Pavel Herrmann <morpheus.ibis@gmail.com> Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
This commit is contained in:
parent
2bb8eb8ec6
commit
288afdc9b9
|
@ -253,7 +253,7 @@ int do_diskboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void __ide_led(uchar led, uchar status)
|
__weak void ide_led(uchar led, uchar status)
|
||||||
{
|
{
|
||||||
#if defined(CONFIG_IDE_LED) && defined(PER8_BASE) /* required by LED_PORT */
|
#if defined(CONFIG_IDE_LED) && defined(PER8_BASE) /* required by LED_PORT */
|
||||||
static uchar led_buffer; /* Buffer for current LED status */
|
static uchar led_buffer; /* Buffer for current LED status */
|
||||||
|
@ -269,9 +269,6 @@ void __ide_led(uchar led, uchar status)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ide_led(uchar led, uchar status)
|
|
||||||
__attribute__ ((weak, alias("__ide_led")));
|
|
||||||
|
|
||||||
#ifndef CONFIG_IDE_LED /* define LED macros, they are not used anyways */
|
#ifndef CONFIG_IDE_LED /* define LED macros, they are not used anyways */
|
||||||
# define DEVICE_LED(x) 0
|
# define DEVICE_LED(x) 0
|
||||||
# define LED_IDE1 1
|
# define LED_IDE1 1
|
||||||
|
@ -280,7 +277,7 @@ void ide_led(uchar led, uchar status)
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
inline void __ide_outb(int dev, int port, unsigned char val)
|
__weak void ide_outb(int dev, int port, unsigned char val)
|
||||||
{
|
{
|
||||||
debug("ide_outb (dev= %d, port= 0x%x, val= 0x%02x) : @ 0x%08lx\n",
|
debug("ide_outb (dev= %d, port= 0x%x, val= 0x%02x) : @ 0x%08lx\n",
|
||||||
dev, port, val,
|
dev, port, val,
|
||||||
|
@ -299,10 +296,7 @@ inline void __ide_outb(int dev, int port, unsigned char val)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ide_outb(int dev, int port, unsigned char val)
|
__weak unsigned char ide_inb(int dev, int port)
|
||||||
__attribute__ ((weak, alias("__ide_outb")));
|
|
||||||
|
|
||||||
inline unsigned char __ide_inb(int dev, int port)
|
|
||||||
{
|
{
|
||||||
uchar val;
|
uchar val;
|
||||||
|
|
||||||
|
@ -318,9 +312,6 @@ inline unsigned char __ide_inb(int dev, int port)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char ide_inb(int dev, int port)
|
|
||||||
__attribute__ ((weak, alias("__ide_inb")));
|
|
||||||
|
|
||||||
void ide_init(void)
|
void ide_init(void)
|
||||||
{
|
{
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
|
@ -461,23 +452,14 @@ block_dev_desc_t *ide_get_dev(int dev)
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void ide_input_swap_data(int dev, ulong *sect_buf, int words)
|
|
||||||
__attribute__ ((weak, alias("__ide_input_swap_data")));
|
|
||||||
|
|
||||||
void ide_input_data(int dev, ulong *sect_buf, int words)
|
|
||||||
__attribute__ ((weak, alias("__ide_input_data")));
|
|
||||||
|
|
||||||
void ide_output_data(int dev, const ulong *sect_buf, int words)
|
|
||||||
__attribute__ ((weak, alias("__ide_output_data")));
|
|
||||||
|
|
||||||
/* We only need to swap data if we are running on a big endian cpu. */
|
/* We only need to swap data if we are running on a big endian cpu. */
|
||||||
#if defined(__LITTLE_ENDIAN)
|
#if defined(__LITTLE_ENDIAN)
|
||||||
void __ide_input_swap_data(int dev, ulong *sect_buf, int words)
|
__weak void ide_input_swap_data(int dev, ulong *sect_buf, int words)
|
||||||
{
|
{
|
||||||
ide_input_data(dev, sect_buf, words);
|
ide_input_data(dev, sect_buf, words);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void __ide_input_swap_data(int dev, ulong *sect_buf, int words)
|
__weak void ide_input_swap_data(int dev, ulong *sect_buf, int words)
|
||||||
{
|
{
|
||||||
volatile ushort *pbuf =
|
volatile ushort *pbuf =
|
||||||
(ushort *) (ATA_CURR_BASE(dev) + ATA_DATA_REG);
|
(ushort *) (ATA_CURR_BASE(dev) + ATA_DATA_REG);
|
||||||
|
@ -500,7 +482,7 @@ void __ide_input_swap_data(int dev, ulong *sect_buf, int words)
|
||||||
|
|
||||||
|
|
||||||
#if defined(CONFIG_IDE_SWAP_IO)
|
#if defined(CONFIG_IDE_SWAP_IO)
|
||||||
void __ide_output_data(int dev, const ulong *sect_buf, int words)
|
__weak void ide_output_data(int dev, const ulong *sect_buf, int words)
|
||||||
{
|
{
|
||||||
ushort *dbuf;
|
ushort *dbuf;
|
||||||
volatile ushort *pbuf;
|
volatile ushort *pbuf;
|
||||||
|
@ -515,7 +497,7 @@ void __ide_output_data(int dev, const ulong *sect_buf, int words)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* ! CONFIG_IDE_SWAP_IO */
|
#else /* ! CONFIG_IDE_SWAP_IO */
|
||||||
void __ide_output_data(int dev, const ulong *sect_buf, int words)
|
__weak void ide_output_data(int dev, const ulong *sect_buf, int words)
|
||||||
{
|
{
|
||||||
#if defined(CONFIG_IDE_AHB)
|
#if defined(CONFIG_IDE_AHB)
|
||||||
ide_write_data(dev, sect_buf, words);
|
ide_write_data(dev, sect_buf, words);
|
||||||
|
@ -526,7 +508,7 @@ void __ide_output_data(int dev, const ulong *sect_buf, int words)
|
||||||
#endif /* CONFIG_IDE_SWAP_IO */
|
#endif /* CONFIG_IDE_SWAP_IO */
|
||||||
|
|
||||||
#if defined(CONFIG_IDE_SWAP_IO)
|
#if defined(CONFIG_IDE_SWAP_IO)
|
||||||
void __ide_input_data(int dev, ulong *sect_buf, int words)
|
__weak void ide_input_data(int dev, ulong *sect_buf, int words)
|
||||||
{
|
{
|
||||||
ushort *dbuf;
|
ushort *dbuf;
|
||||||
volatile ushort *pbuf;
|
volatile ushort *pbuf;
|
||||||
|
@ -544,7 +526,7 @@ void __ide_input_data(int dev, ulong *sect_buf, int words)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* ! CONFIG_IDE_SWAP_IO */
|
#else /* ! CONFIG_IDE_SWAP_IO */
|
||||||
void __ide_input_data(int dev, ulong *sect_buf, int words)
|
__weak void ide_input_data(int dev, ulong *sect_buf, int words)
|
||||||
{
|
{
|
||||||
#if defined(CONFIG_IDE_AHB)
|
#if defined(CONFIG_IDE_AHB)
|
||||||
ide_read_data(dev, sect_buf, words);
|
ide_read_data(dev, sect_buf, words);
|
||||||
|
@ -1038,17 +1020,10 @@ int ide_device_present(int dev)
|
||||||
* ATAPI Support
|
* ATAPI Support
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts)
|
|
||||||
__attribute__ ((weak, alias("__ide_input_data_shorts")));
|
|
||||||
|
|
||||||
void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts)
|
|
||||||
__attribute__ ((weak, alias("__ide_output_data_shorts")));
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(CONFIG_IDE_SWAP_IO)
|
#if defined(CONFIG_IDE_SWAP_IO)
|
||||||
/* since ATAPI may use commands with not 4 bytes alligned length
|
/* since ATAPI may use commands with not 4 bytes alligned length
|
||||||
* we have our own transfer functions, 2 bytes alligned */
|
* we have our own transfer functions, 2 bytes alligned */
|
||||||
void __ide_output_data_shorts(int dev, ushort *sect_buf, int shorts)
|
__weak void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts)
|
||||||
{
|
{
|
||||||
ushort *dbuf;
|
ushort *dbuf;
|
||||||
volatile ushort *pbuf;
|
volatile ushort *pbuf;
|
||||||
|
@ -1065,7 +1040,7 @@ void __ide_output_data_shorts(int dev, ushort *sect_buf, int shorts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void __ide_input_data_shorts(int dev, ushort *sect_buf, int shorts)
|
__weak void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts)
|
||||||
{
|
{
|
||||||
ushort *dbuf;
|
ushort *dbuf;
|
||||||
volatile ushort *pbuf;
|
volatile ushort *pbuf;
|
||||||
|
@ -1083,12 +1058,12 @@ void __ide_input_data_shorts(int dev, ushort *sect_buf, int shorts)
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* ! CONFIG_IDE_SWAP_IO */
|
#else /* ! CONFIG_IDE_SWAP_IO */
|
||||||
void __ide_output_data_shorts(int dev, ushort *sect_buf, int shorts)
|
__weak void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts)
|
||||||
{
|
{
|
||||||
outsw(ATA_CURR_BASE(dev) + ATA_DATA_REG, sect_buf, shorts);
|
outsw(ATA_CURR_BASE(dev) + ATA_DATA_REG, sect_buf, shorts);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __ide_input_data_shorts(int dev, ushort *sect_buf, int shorts)
|
__weak void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts)
|
||||||
{
|
{
|
||||||
insw(ATA_CURR_BASE(dev) + ATA_DATA_REG, sect_buf, shorts);
|
insw(ATA_CURR_BASE(dev) + ATA_DATA_REG, sect_buf, shorts);
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,12 +66,16 @@ void ide_write_data(int dev, const ulong *sect_buf, int words);
|
||||||
/*
|
/*
|
||||||
* I/O function overrides
|
* I/O function overrides
|
||||||
*/
|
*/
|
||||||
|
unsigned char ide_inb(int dev, int port);
|
||||||
|
void ide_outb(int dev, int port, unsigned char val);
|
||||||
void ide_input_swap_data(int dev, ulong *sect_buf, int words);
|
void ide_input_swap_data(int dev, ulong *sect_buf, int words);
|
||||||
void ide_input_data(int dev, ulong *sect_buf, int words);
|
void ide_input_data(int dev, ulong *sect_buf, int words);
|
||||||
void ide_output_data(int dev, const ulong *sect_buf, int words);
|
void ide_output_data(int dev, const ulong *sect_buf, int words);
|
||||||
void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts);
|
void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts);
|
||||||
void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts);
|
void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts);
|
||||||
|
|
||||||
|
void ide_led(uchar led, uchar status);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* board_start_ide() - Start up the board IDE interfac
|
* board_start_ide() - Start up the board IDE interfac
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue