x86/platform/uv/BAU: Cleanup bau_operations declaration and instances
Move the bau_operations declaration after bau struct declarations so the bau structs can be referenced when adding new functions to bau_operations. That way we avoid forward declarations of the bau structs. Likewise, move uv*_bau_ops structs down to avoid forward declarations of new functions defined in the same file. Declare these structs __initconst since they are only used during initialization. Similarly, declare the bau_operations ops instance __ro_after_init as it is read-only after initialization. This is a preparatory patch for adding wait_completion to bau_operations. Signed-off-by: Andrew Banman <abanman@hpe.com> Acked-by: Ingo Molnar <mingo@kernel.org> Acked-by: Mike Travis <mike.travis@hpe.com> Cc: sivanich@hpe.com Cc: rja@hpe.com Cc: akpm@linux-foundation.org Link: http://lkml.kernel.org/r/1489077734-111753-4-git-send-email-abanman@hpe.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
Родитель
e9be36443c
Коммит
8e3b21b6db
|
@ -406,17 +406,6 @@ struct uv2_3_bau_msg_header {
|
||||||
/* bits 127:120 */
|
/* bits 127:120 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Abstracted BAU functions */
|
|
||||||
struct bau_operations {
|
|
||||||
unsigned long (*read_l_sw_ack)(void);
|
|
||||||
unsigned long (*read_g_sw_ack)(int pnode);
|
|
||||||
unsigned long (*bau_gpa_to_offset)(unsigned long vaddr);
|
|
||||||
void (*write_l_sw_ack)(unsigned long mmr);
|
|
||||||
void (*write_g_sw_ack)(int pnode, unsigned long mmr);
|
|
||||||
void (*write_payload_first)(int pnode, unsigned long mmr);
|
|
||||||
void (*write_payload_last)(int pnode, unsigned long mmr);
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The activation descriptor:
|
* The activation descriptor:
|
||||||
* The format of the message to send, plus all accompanying control
|
* The format of the message to send, plus all accompanying control
|
||||||
|
@ -668,6 +657,17 @@ struct bau_control {
|
||||||
struct hub_and_pnode *thp;
|
struct hub_and_pnode *thp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Abstracted BAU functions */
|
||||||
|
struct bau_operations {
|
||||||
|
unsigned long (*read_l_sw_ack)(void);
|
||||||
|
unsigned long (*read_g_sw_ack)(int pnode);
|
||||||
|
unsigned long (*bau_gpa_to_offset)(unsigned long vaddr);
|
||||||
|
void (*write_l_sw_ack)(unsigned long mmr);
|
||||||
|
void (*write_g_sw_ack)(int pnode, unsigned long mmr);
|
||||||
|
void (*write_payload_first)(int pnode, unsigned long mmr);
|
||||||
|
void (*write_payload_last)(int pnode, unsigned long mmr);
|
||||||
|
};
|
||||||
|
|
||||||
static inline void write_mmr_data_broadcast(int pnode, unsigned long mmr_image)
|
static inline void write_mmr_data_broadcast(int pnode, unsigned long mmr_image)
|
||||||
{
|
{
|
||||||
write_gmmr(pnode, UVH_BAU_DATA_BROADCAST, mmr_image);
|
write_gmmr(pnode, UVH_BAU_DATA_BROADCAST, mmr_image);
|
||||||
|
|
|
@ -23,28 +23,7 @@
|
||||||
#include <asm/irq_vectors.h>
|
#include <asm/irq_vectors.h>
|
||||||
#include <asm/timer.h>
|
#include <asm/timer.h>
|
||||||
|
|
||||||
static struct bau_operations ops;
|
static struct bau_operations ops __ro_after_init;
|
||||||
|
|
||||||
static struct bau_operations uv123_bau_ops = {
|
|
||||||
.bau_gpa_to_offset = uv_gpa_to_offset,
|
|
||||||
.read_l_sw_ack = read_mmr_sw_ack,
|
|
||||||
.read_g_sw_ack = read_gmmr_sw_ack,
|
|
||||||
.write_l_sw_ack = write_mmr_sw_ack,
|
|
||||||
.write_g_sw_ack = write_gmmr_sw_ack,
|
|
||||||
.write_payload_first = write_mmr_payload_first,
|
|
||||||
.write_payload_last = write_mmr_payload_last,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct bau_operations uv4_bau_ops = {
|
|
||||||
.bau_gpa_to_offset = uv_gpa_to_soc_phys_ram,
|
|
||||||
.read_l_sw_ack = read_mmr_proc_sw_ack,
|
|
||||||
.read_g_sw_ack = read_gmmr_proc_sw_ack,
|
|
||||||
.write_l_sw_ack = write_mmr_proc_sw_ack,
|
|
||||||
.write_g_sw_ack = write_gmmr_proc_sw_ack,
|
|
||||||
.write_payload_first = write_mmr_proc_payload_first,
|
|
||||||
.write_payload_last = write_mmr_proc_payload_last,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */
|
/* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */
|
||||||
static int timeout_base_ns[] = {
|
static int timeout_base_ns[] = {
|
||||||
|
@ -2158,6 +2137,26 @@ fail:
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct bau_operations uv123_bau_ops __initconst = {
|
||||||
|
.bau_gpa_to_offset = uv_gpa_to_offset,
|
||||||
|
.read_l_sw_ack = read_mmr_sw_ack,
|
||||||
|
.read_g_sw_ack = read_gmmr_sw_ack,
|
||||||
|
.write_l_sw_ack = write_mmr_sw_ack,
|
||||||
|
.write_g_sw_ack = write_gmmr_sw_ack,
|
||||||
|
.write_payload_first = write_mmr_payload_first,
|
||||||
|
.write_payload_last = write_mmr_payload_last,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct bau_operations uv4_bau_ops __initconst = {
|
||||||
|
.bau_gpa_to_offset = uv_gpa_to_soc_phys_ram,
|
||||||
|
.read_l_sw_ack = read_mmr_proc_sw_ack,
|
||||||
|
.read_g_sw_ack = read_gmmr_proc_sw_ack,
|
||||||
|
.write_l_sw_ack = write_mmr_proc_sw_ack,
|
||||||
|
.write_g_sw_ack = write_gmmr_proc_sw_ack,
|
||||||
|
.write_payload_first = write_mmr_proc_payload_first,
|
||||||
|
.write_payload_last = write_mmr_proc_payload_last,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialization of BAU-related structures
|
* Initialization of BAU-related structures
|
||||||
*/
|
*/
|
||||||
|
|
Загрузка…
Ссылка в новой задаче