clean up pseries hcall interfaces
Subsystems (2)
PATCH 1/1 clean up pseries hcall interfaces
Our pseries hcall interfaces are out of control:
plpar_hcall_norets
plpar_hcall
plpar_hcall_8arg_2ret
plpar_hcall_4out
plpar_hcall_7arg_7ret
plpar_hcall_9arg_9ret
Create 3 interfaces to cover all cases:
plpar_hcall_norets: 7 arguments no returns
plpar_hcall: 6 arguments 4 returns
plpar_hcall9: 9 arguments 9 returns
There are only 2 cases in the kernel that need plpar_hcall9, hopefully we can keep it that way.
Pass in a buffer to stash return parameters so we avoid the &dummy1, &dummy2 madness.
Signed-off-by Anton Blanchard <[email protected]>
--
arch/powerpc/kernel/lparcfg.c +14 -4
@@ -183,8 +183,14 @@ static unsigned int h_get_ppp(unsigned l unsigned long *resource) {unsigned long rc; - rc =plpar_hcall_4out (H_GET_PPP ,0 ,0 ,0 ,0 , entitled, unallocated, - aggregation, resource); +unsigned long retbuf[PLPAR_HCALL_BUFSIZE ]; + + rc =plpar_hcall (H_GET_PPP , retbuf); + + *entitled = retbuf[0 ]; + *unallocated = retbuf[1 ]; + *aggregation = retbuf[2 ]; + *resource = retbuf[3 ];log_plpar_hcall_return (rc,"H_GET_PPP" );
@@ -194,8 +200,12 @@ static unsigned int h_get_ppp(unsigned lstatic void h_pic (unsigned long *pool_idle_time,unsigned long *num_procs) {unsigned long rc; -unsigned long dummy; - rc =plpar_hcall (H_PIC ,0 ,0 ,0 ,0 , pool_idle_time, num_procs, &dummy); +unsigned long retbuf[PLPAR_HCALL_BUFSIZE ]; + + rc =plpar_hcall (H_PIC , retbuf); + + *pool_idle_time = retbuf[0 ]; + *num_procs = retbuf[1 ];if (rc !=H_AUTHORITY )log_plpar_hcall_return (rc,"H_PIC" );
arch/powerpc/kernel/rtas.c +5 -6
@@ -666,15 +666,14 @@ static int rtas_ibm_suspend_me(struct rtint i;long state;long rc; -unsigned long dummy; - +unsigned long retbuf[PLPAR_HCALL_BUFSIZE ];struct rtas_suspend_me_data data;/* Make sure the state is valid */ - rc =plpar_hcall (H_VASI_STATE , - ((u64 )args->args[0 ] <<32 ) | args->args[1 ], -0 ,0 ,0 , - &state, &dummy, &dummy); + rc =plpar_hcall (H_VASI_STATE , retbuf, + ((u64 )args->args[0 ] <<32 ) | args->args[1 ]); + + state = retbuf[0 ];if (rc) {printk (KERN_ERR "rtas_ibm_suspend_me: vasi_state returned %ld\n" ,rc);
arch/powerpc/platforms/pseries/hvCall.S +35 -172
248 lines not on this page · raw message
arch/powerpc/platforms/pseries/hvconsole.c +3 -2
@@ -27,6 +27,7 @@#include <linux/module.h> #include <asm/hvcall.h> #include <asm/hvconsole.h> +#include "plpar_wrappers.h" /** * hvc_get_chars - retrieve characters from firmware for denoted vterm adatper
@@ -40,9 +41,9 @@ int hvc_get_chars(uint32_t vtermno, char {unsigned long got; -if (plpar_hcall (H_GET_TERM_CHAR , vtermno,0 ,0 ,0 , &got, - (unsigned long *)buf, (unsigned long *)buf+1 ) ==H_SUCCESS ) +if (plpar_get_term_char (vtermno, &got, buf) ==H_SUCCESS )return got; +return 0 ; }
arch/powerpc/platforms/pseries/lpar.c +4 -8
@@ -48,13 +48,11 @@ #define DBG_LOW(fmt...) do { } while(0)#endif -/* in pSeries_hvCall.S */ +/* in hvCall.S */ EXPORT_SYMBOL (plpar_hcall); -EXPORT_SYMBOL (plpar_hcall_4out); +EXPORT_SYMBOL (plpar_hcall9);EXPORT_SYMBOL (plpar_hcall_norets); -EXPORT_SYMBOL (plpar_hcall_8arg_2ret); -EXPORT_SYMBOL (plpar_hcall_7arg_7ret); -EXPORT_SYMBOL (plpar_hcall_9arg_9ret); +extern void pSeries_find_serial_port (void );
@@ -277,7 +275,6 @@ long pSeries_lpar_hpte_insert(unsigned lunsigned long flags;unsigned long slot;unsigned long hpte_v, hpte_r; -unsigned long dummy0, dummy1;if (!(vflags &HPTE_V_BOLTED )) DBG_LOW("hpte_insert(group=%lx, va=%016lx, pa=%016lx, "
@@ -302,8 +299,7 @@ long pSeries_lpar_hpte_insert(unsigned lif (rflags & (_PAGE_GUARDED|_PAGE_NO_CACHE)) hpte_r &= ~_PAGE_COHERENT; - lpar_rc =plpar_hcall (H_ENTER , flags, hpte_group, hpte_v, - hpte_r, &slot, &dummy0, &dummy1); + lpar_rc =plpar_pte_enter (flags, hpte_group, hpte_v, hpte_r, &slot);if (unlikely (lpar_rc ==H_PTEG_FULL )) {if (!(vflags &HPTE_V_BOLTED ))DBG_LOW (" full\n" );
arch/powerpc/platforms/pseries/plpar_wrappers.h +80 -17
143 lines not on this page · raw message
arch/powerpc/platforms/pseries/xics.c +1 -21
@@ -34,6 +34,7 @@#include <asm/i8259.h> #include "xics.h" +#include "plpar_wrappers.h" #define XICS_IPI 2#define XICS_IRQ_SPURIOUS 0
@@ -110,27 +111,6 @@ static inline void direct_qirr_info(int/* LPAR low level accessors */ -static inline long plpar_eoi (unsigned long xirr) -{ -return plpar_hcall_norets (H_EOI , xirr); -} - -static inline long plpar_cppr (unsigned long cppr) -{ -return plpar_hcall_norets (H_CPPR , cppr); -} - -static inline long plpar_ipi (unsigned long servernum,unsigned long mfrr) -{ -return plpar_hcall_norets (H_IPI , servernum, mfrr); -} - -static inline long plpar_xirr (unsigned long *xirr_ret) -{ -unsigned long dummy; -return plpar_hcall (H_XIRR ,0 ,0 ,0 ,0 , xirr_ret, &dummy, &dummy); -} -static inline unsigned int lpar_xirr_info_get (int n_cpu) {unsigned long lpar_rc;
drivers/net/ibmveth.c +2 -1
@@ -702,7 +702,8 @@ static int ibmveth_start_xmit(struct sk_ desc[3 ].desc, desc[4 ].desc, desc[5 ].desc, - correlator); + correlator, + &correlator); }while ((lpar_rc ==H_BUSY ) && (retry_count--));if (lpar_rc !=H_SUCCESS && lpar_rc !=H_DROPPED ) {
drivers/net/ibmveth.h +15 -2
@@ -61,8 +61,21 @@#define h_add_logical_lan_buffer (ua, buf) \ plpar_hcall_norets(H_ADD_LOGICAL_LAN_BUFFER, ua, buf) -#define h_send_logical_lan (ua, buf1, buf2, buf3, buf4, buf5, buf6, correlator) \ - plpar_hcall_8arg_2ret(H_SEND_LOGICAL_LAN, ua, buf1, buf2, buf3, buf4, buf5, buf6, correlator, &correlator) +static inline long h_send_logical_lan (unsigned long unit_address, +unsigned long desc1,unsigned long desc2,unsigned long desc3, +unsigned long desc4,unsigned long desc5,unsigned long desc6, +unsigned long corellator_in,unsigned long *corellator_out) +{ +long rc; +unsigned long retbuf[PLPAR_HCALL9_BUFSIZE ]; + + rc =plpar_hcall9 (H_SEND_LOGICAL_LAN , retbuf, unit_address, desc1, + desc2, desc3, desc4, desc5, desc6, corellator_in); + + *corellator_out = retbuf[0 ]; + +return rc; +}#define h_multicast_ctrl (ua, cmd, mac) \ plpar_hcall_norets(H_MULTICAST_CTRL, ua, cmd, mac)
include/asm-powerpc/hvcall.h +25 -80
119 lines not on this page · raw message