mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 15:04:27 +08:00
sticon/parisc: Allow 64-bit STI calls in PDC firmware abstration
Some 64-bit machines require us to call the STI ROM in 64-bit mode, e.g. with the VisFXe graphic card. This patch allows drivers to use such 64-bit calling conventions. Tested-by: John David Anglin <dave.anglin@bell.net> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
parent
c9cc4542e1
commit
ededd9d278
@ -88,8 +88,8 @@ int pdc_iodc_print(const unsigned char *str, unsigned count);
|
||||
|
||||
void pdc_emergency_unlock(void);
|
||||
int pdc_sti_call(unsigned long func, unsigned long flags,
|
||||
unsigned long inptr, unsigned long outputr,
|
||||
unsigned long glob_cfg);
|
||||
unsigned long inptr, unsigned long outputr,
|
||||
unsigned long glob_cfg, int do_call64);
|
||||
|
||||
int __pdc_cpu_rendezvous(void);
|
||||
void pdc_cpu_rendezvous_lock(void);
|
||||
|
@ -1389,17 +1389,25 @@ int pdc_iodc_getc(void)
|
||||
}
|
||||
|
||||
int pdc_sti_call(unsigned long func, unsigned long flags,
|
||||
unsigned long inptr, unsigned long outputr,
|
||||
unsigned long glob_cfg)
|
||||
unsigned long inptr, unsigned long outputr,
|
||||
unsigned long glob_cfg, int do_call64)
|
||||
{
|
||||
int retval;
|
||||
int retval = 0;
|
||||
unsigned long irqflags;
|
||||
|
||||
spin_lock_irqsave(&pdc_lock, irqflags);
|
||||
retval = real32_call(func, flags, inptr, outputr, glob_cfg);
|
||||
spin_unlock_irqrestore(&pdc_lock, irqflags);
|
||||
spin_lock_irqsave(&pdc_lock, irqflags);
|
||||
if (IS_ENABLED(CONFIG_64BIT) && do_call64) {
|
||||
#ifdef CONFIG_64BIT
|
||||
retval = real64_call(func, flags, inptr, outputr, glob_cfg);
|
||||
#else
|
||||
WARN_ON(1);
|
||||
#endif
|
||||
} else {
|
||||
retval = real32_call(func, flags, inptr, outputr, glob_cfg);
|
||||
}
|
||||
spin_unlock_irqrestore(&pdc_lock, irqflags);
|
||||
|
||||
return retval;
|
||||
return retval;
|
||||
}
|
||||
EXPORT_SYMBOL(pdc_sti_call);
|
||||
|
||||
|
@ -1142,7 +1142,7 @@ int sti_call(const struct sti_struct *sti, unsigned long func,
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
ret = pdc_sti_call(func, _flags, _inptr, _outptr, _glob_cfg);
|
||||
ret = pdc_sti_call(func, _flags, _inptr, _outptr, _glob_cfg, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user