diff options
Diffstat (limited to 'drivers/misc/sgi-xp/xpc.h')
-rw-r--r-- | drivers/misc/sgi-xp/xpc.h | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/drivers/misc/sgi-xp/xpc.h b/drivers/misc/sgi-xp/xpc.h index 275b78896a73..114444cfd496 100644 --- a/drivers/misc/sgi-xp/xpc.h +++ b/drivers/misc/sgi-xp/xpc.h | |||
@@ -92,7 +92,9 @@ struct xpc_rsvd_page { | |||
92 | u8 pad1[3]; /* align to next u64 in 1st 64-byte cacheline */ | 92 | u8 pad1[3]; /* align to next u64 in 1st 64-byte cacheline */ |
93 | union { | 93 | union { |
94 | unsigned long vars_pa; /* phys address of struct xpc_vars */ | 94 | unsigned long vars_pa; /* phys address of struct xpc_vars */ |
95 | unsigned long activate_mq_gpa; /* gru phy addr of activate_mq */ | 95 | unsigned long activate_gru_mq_desc_gpa; /* phys addr of */ |
96 | /* activate mq's */ | ||
97 | /* gru mq descriptor */ | ||
96 | } sn; | 98 | } sn; |
97 | unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */ | 99 | unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */ |
98 | u64 pad2[10]; /* align to last u64 in 2nd 64-byte cacheline */ | 100 | u64 pad2[10]; /* align to last u64 in 2nd 64-byte cacheline */ |
@@ -189,7 +191,9 @@ struct xpc_gru_mq_uv { | |||
189 | int irq; /* irq raised when message is received in mq */ | 191 | int irq; /* irq raised when message is received in mq */ |
190 | int mmr_blade; /* blade where watchlist was allocated from */ | 192 | int mmr_blade; /* blade where watchlist was allocated from */ |
191 | unsigned long mmr_offset; /* offset of irq mmr located on mmr_blade */ | 193 | unsigned long mmr_offset; /* offset of irq mmr located on mmr_blade */ |
194 | unsigned long mmr_value; /* value of irq mmr located on mmr_blade */ | ||
192 | int watchlist_num; /* number of watchlist allocatd by BIOS */ | 195 | int watchlist_num; /* number of watchlist allocatd by BIOS */ |
196 | void *gru_mq_desc; /* opaque structure used by the GRU driver */ | ||
193 | }; | 197 | }; |
194 | 198 | ||
195 | /* | 199 | /* |
@@ -197,6 +201,7 @@ struct xpc_gru_mq_uv { | |||
197 | * heartbeat, partition active state, and channel state. This is UV only. | 201 | * heartbeat, partition active state, and channel state. This is UV only. |
198 | */ | 202 | */ |
199 | struct xpc_activate_mq_msghdr_uv { | 203 | struct xpc_activate_mq_msghdr_uv { |
204 | unsigned int gru_msg_hdr; /* FOR GRU INTERNAL USE ONLY */ | ||
200 | short partid; /* sender's partid */ | 205 | short partid; /* sender's partid */ |
201 | u8 act_state; /* sender's act_state at time msg sent */ | 206 | u8 act_state; /* sender's act_state at time msg sent */ |
202 | u8 type; /* message's type */ | 207 | u8 type; /* message's type */ |
@@ -232,7 +237,7 @@ struct xpc_activate_mq_msg_heartbeat_req_uv { | |||
232 | struct xpc_activate_mq_msg_activate_req_uv { | 237 | struct xpc_activate_mq_msg_activate_req_uv { |
233 | struct xpc_activate_mq_msghdr_uv hdr; | 238 | struct xpc_activate_mq_msghdr_uv hdr; |
234 | unsigned long rp_gpa; | 239 | unsigned long rp_gpa; |
235 | unsigned long activate_mq_gpa; | 240 | unsigned long activate_gru_mq_desc_gpa; |
236 | }; | 241 | }; |
237 | 242 | ||
238 | struct xpc_activate_mq_msg_deactivate_req_uv { | 243 | struct xpc_activate_mq_msg_deactivate_req_uv { |
@@ -263,7 +268,7 @@ struct xpc_activate_mq_msg_chctl_openreply_uv { | |||
263 | short ch_number; | 268 | short ch_number; |
264 | short remote_nentries; /* ??? Is this needed? What is? */ | 269 | short remote_nentries; /* ??? Is this needed? What is? */ |
265 | short local_nentries; /* ??? Is this needed? What is? */ | 270 | short local_nentries; /* ??? Is this needed? What is? */ |
266 | unsigned long local_notify_mq_gpa; | 271 | unsigned long notify_gru_mq_desc_gpa; |
267 | }; | 272 | }; |
268 | 273 | ||
269 | /* | 274 | /* |
@@ -510,8 +515,8 @@ struct xpc_channel_sn2 { | |||
510 | }; | 515 | }; |
511 | 516 | ||
512 | struct xpc_channel_uv { | 517 | struct xpc_channel_uv { |
513 | unsigned long remote_notify_mq_gpa; /* gru phys address of remote */ | 518 | void *cached_notify_gru_mq_desc; /* remote partition's notify mq's */ |
514 | /* partition's notify mq */ | 519 | /* gru mq descriptor */ |
515 | 520 | ||
516 | struct xpc_send_msg_slot_uv *send_msg_slots; | 521 | struct xpc_send_msg_slot_uv *send_msg_slots; |
517 | void *recv_msg_slots; /* each slot will hold a xpc_notify_mq_msg_uv */ | 522 | void *recv_msg_slots; /* each slot will hold a xpc_notify_mq_msg_uv */ |
@@ -682,8 +687,12 @@ struct xpc_partition_sn2 { | |||
682 | }; | 687 | }; |
683 | 688 | ||
684 | struct xpc_partition_uv { | 689 | struct xpc_partition_uv { |
685 | unsigned long remote_activate_mq_gpa; /* gru phys address of remote */ | 690 | unsigned long activate_gru_mq_desc_gpa; /* phys addr of parititon's */ |
686 | /* partition's activate mq */ | 691 | /* activate mq's gru mq */ |
692 | /* descriptor */ | ||
693 | void *cached_activate_gru_mq_desc; /* cached copy of partition's */ | ||
694 | /* activate mq's gru mq descriptor */ | ||
695 | struct mutex cached_activate_gru_mq_desc_mutex; | ||
687 | spinlock_t flags_lock; /* protect updating of flags */ | 696 | spinlock_t flags_lock; /* protect updating of flags */ |
688 | unsigned int flags; /* general flags */ | 697 | unsigned int flags; /* general flags */ |
689 | u8 remote_act_state; /* remote partition's act_state */ | 698 | u8 remote_act_state; /* remote partition's act_state */ |
@@ -694,8 +703,9 @@ struct xpc_partition_uv { | |||
694 | 703 | ||
695 | /* struct xpc_partition_uv flags */ | 704 | /* struct xpc_partition_uv flags */ |
696 | 705 | ||
697 | #define XPC_P_HEARTBEAT_OFFLINE_UV 0x00000001 | 706 | #define XPC_P_HEARTBEAT_OFFLINE_UV 0x00000001 |
698 | #define XPC_P_ENGAGED_UV 0x00000002 | 707 | #define XPC_P_ENGAGED_UV 0x00000002 |
708 | #define XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV 0x00000004 | ||
699 | 709 | ||
700 | /* struct xpc_partition_uv act_state change requests */ | 710 | /* struct xpc_partition_uv act_state change requests */ |
701 | 711 | ||
@@ -804,6 +814,7 @@ extern void xpc_activate_kthreads(struct xpc_channel *, int); | |||
804 | extern void xpc_create_kthreads(struct xpc_channel *, int, int); | 814 | extern void xpc_create_kthreads(struct xpc_channel *, int, int); |
805 | extern void xpc_disconnect_wait(int); | 815 | extern void xpc_disconnect_wait(int); |
806 | extern int (*xpc_setup_partitions_sn) (void); | 816 | extern int (*xpc_setup_partitions_sn) (void); |
817 | extern void (*xpc_teardown_partitions_sn) (void); | ||
807 | extern enum xp_retval (*xpc_get_partition_rsvd_page_pa) (void *, u64 *, | 818 | extern enum xp_retval (*xpc_get_partition_rsvd_page_pa) (void *, u64 *, |
808 | unsigned long *, | 819 | unsigned long *, |
809 | size_t *); | 820 | size_t *); |
@@ -846,8 +857,8 @@ extern void (*xpc_send_chctl_openrequest) (struct xpc_channel *, | |||
846 | unsigned long *); | 857 | unsigned long *); |
847 | extern void (*xpc_send_chctl_openreply) (struct xpc_channel *, unsigned long *); | 858 | extern void (*xpc_send_chctl_openreply) (struct xpc_channel *, unsigned long *); |
848 | 859 | ||
849 | extern void (*xpc_save_remote_msgqueue_pa) (struct xpc_channel *, | 860 | extern enum xp_retval (*xpc_save_remote_msgqueue_pa) (struct xpc_channel *, |
850 | unsigned long); | 861 | unsigned long); |
851 | 862 | ||
852 | extern enum xp_retval (*xpc_send_payload) (struct xpc_channel *, u32, void *, | 863 | extern enum xp_retval (*xpc_send_payload) (struct xpc_channel *, u32, void *, |
853 | u16, u8, xpc_notify_func, void *); | 864 | u16, u8, xpc_notify_func, void *); |