diff options
| author | Jack Steiner <steiner@sgi.com> | 2009-04-02 19:59:10 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-02 22:05:06 -0400 |
| commit | 6f2584f47474d29ce829604bfc8b56c10b352fdb (patch) | |
| tree | f5b5c63c7c73785a641c995c2fe48b4c5cc726eb /drivers/misc/sgi-xp/xpc.h | |
| parent | ecdaf2b55251f718a1fbaf4a3f72bfd6e25c582c (diff) | |
sgi-gru: add support to the GRU driver for message queue interrupts
Add support to the GRU driver for message queue interrupts.
Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Dean Nelson <dcn@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
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 275b78896a7..114444cfd49 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 *); |
