Skip to content

Commit

Permalink
[SPARC64]: Add sun4v_cpu_qconf() hypervisor call.
Browse files Browse the repository at this point in the history
Call it from register_one_mondo().

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Mar 20, 2006
1 parent bc45e32 commit 94f8762
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 19 deletions.
12 changes: 12 additions & 0 deletions arch/sparc64/kernel/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -1772,3 +1772,15 @@ sun4v_intr_settarget:
retl
nop

/* %o0: type
* %o1: queue paddr
* %o2: num queue entries
*
* returns %o0: status
*/
.globl sun4v_cpu_qconf
sun4v_cpu_qconf:
mov HV_FAST_CPU_QCONF, %o5
ta HV_FAST_TRAP
retl
nop
26 changes: 7 additions & 19 deletions arch/sparc64/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -939,25 +939,13 @@ void init_irqwork_curcpu(void)

static void __cpuinit register_one_mondo(unsigned long paddr, unsigned long type)
{
register unsigned long func __asm__("%o5");
register unsigned long arg0 __asm__("%o0");
register unsigned long arg1 __asm__("%o1");
register unsigned long arg2 __asm__("%o2");

func = HV_FAST_CPU_QCONF;
arg0 = type;
arg1 = paddr;
arg2 = 128; /* XXX Implied by Niagara queue offsets. XXX */
__asm__ __volatile__("ta %8"
: "=&r" (func), "=&r" (arg0),
"=&r" (arg1), "=&r" (arg2)
: "0" (func), "1" (arg0),
"2" (arg1), "3" (arg2),
"i" (HV_FAST_TRAP));

if (arg0 != HV_EOK) {
prom_printf("SUN4V: cpu_qconf(%lu) failed with error %lu\n",
type, func);
unsigned long num_entries = 128;
unsigned long status;

status = sun4v_cpu_qconf(type, paddr, num_entries);
if (status != HV_EOK) {
prom_printf("SUN4V: sun4v_cpu_qconf(%lu:%lx:%lu) failed, "
"err %lu\n", type, paddr, num_entries, status);
prom_halt();
}
}
Expand Down
6 changes: 6 additions & 0 deletions include/asm-sparc64/hypervisor.h
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,12 @@
#define HV_CPU_QUEUE_RES_ERROR 0x3e
#define HV_CPU_QUEUE_NONRES_ERROR 0x3f

#ifndef __ASSEMBLY__
extern unsigned long sun4v_cpu_qconf(unsigned long type,
unsigned long queue_paddr,
unsigned long num_queue_entries);
#endif

/* cpu_qinfo()
* TRAP: HV_FAST_TRAP
* FUNCTION: HV_FAST_CPU_QINFO
Expand Down

0 comments on commit 94f8762

Please sign in to comment.