hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/misc/sgi-xp/xpc.h
....@@ -71,14 +71,10 @@
7171 * 'SAL_nasids_size'. (Local partition's mask pointers are xpc_part_nasids
7272 * and xpc_mach_nasids.)
7373 *
74
- * vars (ia64-sn2 only)
75
- * vars part (ia64-sn2 only)
76
- *
7774 * Immediately following the mach_nasids mask are the XPC variables
7875 * required by other partitions. First are those that are generic to all
7976 * partitions (vars), followed on the next available cacheline by those
8077 * which are partition specific (vars part). These are setup by XPC.
81
- * (Local partition's vars pointers are xpc_vars and xpc_vars_part.)
8278 *
8379 * Note: Until 'ts_jiffies' is set non-zero, the partition XPC code has not been
8480 * initialized.
....@@ -93,9 +89,6 @@
9389 unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */
9490 union {
9591 struct {
96
- unsigned long vars_pa; /* phys addr */
97
- } sn2;
98
- struct {
9992 unsigned long heartbeat_gpa; /* phys addr */
10093 unsigned long activate_gru_mq_desc_gpa; /* phys addr */
10194 } uv;
....@@ -106,84 +99,14 @@
10699
107100 #define XPC_RP_VERSION _XPC_VERSION(3, 0) /* version 3.0 of the reserved page */
108101
109
-/*
110
- * Define the structures by which XPC variables can be exported to other
111
- * partitions. (There are two: struct xpc_vars and struct xpc_vars_part)
112
- */
113
-
114
-/*
115
- * The following structure describes the partition generic variables
116
- * needed by other partitions in order to properly initialize.
117
- *
118
- * struct xpc_vars version number also applies to struct xpc_vars_part.
119
- * Changes to either structure and/or related functionality should be
120
- * reflected by incrementing either the major or minor version numbers
121
- * of struct xpc_vars.
122
- */
123
-struct xpc_vars_sn2 {
124
- u8 version;
125
- u64 heartbeat;
126
- DECLARE_BITMAP(heartbeating_to_mask, XP_MAX_NPARTITIONS_SN2);
127
- u64 heartbeat_offline; /* if 0, heartbeat should be changing */
128
- int activate_IRQ_nasid;
129
- int activate_IRQ_phys_cpuid;
130
- unsigned long vars_part_pa;
131
- unsigned long amos_page_pa;/* paddr of page of amos from MSPEC driver */
132
- struct amo *amos_page; /* vaddr of page of amos from MSPEC driver */
133
-};
134
-
135
-#define XPC_V_VERSION _XPC_VERSION(3, 1) /* version 3.1 of the cross vars */
136
-
137
-/*
138
- * The following structure describes the per partition specific variables.
139
- *
140
- * An array of these structures, one per partition, will be defined. As a
141
- * partition becomes active XPC will copy the array entry corresponding to
142
- * itself from that partition. It is desirable that the size of this structure
143
- * evenly divides into a 128-byte cacheline, such that none of the entries in
144
- * this array crosses a 128-byte cacheline boundary. As it is now, each entry
145
- * occupies 64-bytes.
146
- */
147
-struct xpc_vars_part_sn2 {
148
- u64 magic;
149
-
150
- unsigned long openclose_args_pa; /* phys addr of open and close args */
151
- unsigned long GPs_pa; /* physical address of Get/Put values */
152
-
153
- unsigned long chctl_amo_pa; /* physical address of chctl flags' amo */
154
-
155
- int notify_IRQ_nasid; /* nasid of where to send notify IRQs */
156
- int notify_IRQ_phys_cpuid; /* CPUID of where to send notify IRQs */
157
-
158
- u8 nchannels; /* #of defined channels supported */
159
-
160
- u8 reserved[23]; /* pad to a full 64 bytes */
161
-};
162
-
163
-/*
164
- * The vars_part MAGIC numbers play a part in the first contact protocol.
165
- *
166
- * MAGIC1 indicates that the per partition specific variables for a remote
167
- * partition have been initialized by this partition.
168
- *
169
- * MAGIC2 indicates that this partition has pulled the remote partititions
170
- * per partition variables that pertain to this partition.
171
- */
172
-#define XPC_VP_MAGIC1_SN2 0x0053524156435058L /* 'XPCVARS\0'L (little endian) */
173
-#define XPC_VP_MAGIC2_SN2 0x0073726176435058L /* 'XPCvars\0'L (little endian) */
174
-
175102 /* the reserved page sizes and offsets */
176103
177104 #define XPC_RP_HEADER_SIZE L1_CACHE_ALIGN(sizeof(struct xpc_rsvd_page))
178
-#define XPC_RP_VARS_SIZE L1_CACHE_ALIGN(sizeof(struct xpc_vars_sn2))
179105
180106 #define XPC_RP_PART_NASIDS(_rp) ((unsigned long *)((u8 *)(_rp) + \
181107 XPC_RP_HEADER_SIZE))
182108 #define XPC_RP_MACH_NASIDS(_rp) (XPC_RP_PART_NASIDS(_rp) + \
183109 xpc_nasid_mask_nlongs)
184
-#define XPC_RP_VARS(_rp) ((struct xpc_vars_sn2 *) \
185
- (XPC_RP_MACH_NASIDS(_rp) + \
186
- xpc_nasid_mask_nlongs))
187110
188111
189112 /*
....@@ -298,17 +221,6 @@
298221 #define XPC_UNPACK_ARG2(_args) ((((u64)_args) >> 32) & 0xffffffff)
299222
300223 /*
301
- * Define a Get/Put value pair (pointers) used with a message queue.
302
- */
303
-struct xpc_gp_sn2 {
304
- s64 get; /* Get value */
305
- s64 put; /* Put value */
306
-};
307
-
308
-#define XPC_GP_SIZE \
309
- L1_CACHE_ALIGN(sizeof(struct xpc_gp_sn2) * XPC_MAX_NCHANNELS)
310
-
311
-/*
312224 * Define a structure that contains arguments associated with opening and
313225 * closing a channel.
314226 */
....@@ -341,30 +253,6 @@
341253 };
342254
343255 /*
344
- * Define a sn2 styled message.
345
- *
346
- * A user-defined message resides in the payload area. The max size of the
347
- * payload is defined by the user via xpc_connect().
348
- *
349
- * The size of a message entry (within a message queue) must be a 128-byte
350
- * cacheline sized multiple in order to facilitate the BTE transfer of messages
351
- * from one message queue to another.
352
- */
353
-struct xpc_msg_sn2 {
354
- u8 flags; /* FOR XPC INTERNAL USE ONLY */
355
- u8 reserved[7]; /* FOR XPC INTERNAL USE ONLY */
356
- s64 number; /* FOR XPC INTERNAL USE ONLY */
357
-
358
- u64 payload; /* user defined portion of message */
359
-};
360
-
361
-/* struct xpc_msg_sn2 flags */
362
-
363
-#define XPC_M_SN2_DONE 0x01 /* msg has been received/consumed */
364
-#define XPC_M_SN2_READY 0x02 /* msg is ready to be sent */
365
-#define XPC_M_SN2_INTERRUPT 0x04 /* send interrupt when msg consumed */
366
-
367
-/*
368256 * The format of a uv XPC notify_mq GRU message is as follows:
369257 *
370258 * A user-defined message resides in the payload area. The max size of the
....@@ -388,20 +276,6 @@
388276 struct xpc_notify_mq_msg_uv {
389277 struct xpc_notify_mq_msghdr_uv hdr;
390278 unsigned long payload;
391
-};
392
-
393
-/*
394
- * Define sn2's notify entry.
395
- *
396
- * This is used to notify a message's sender that their message was received
397
- * and consumed by the intended recipient.
398
- */
399
-struct xpc_notify_sn2 {
400
- u8 type; /* type of notification */
401
-
402
- /* the following two fields are only used if type == XPC_N_CALL */
403
- xpc_notify_func func; /* user's notify function */
404
- void *key; /* pointer to user's key */
405279 };
406280
407281 /* struct xpc_notify_sn2 type of notification */
....@@ -430,102 +304,6 @@
430304 * allocated at the time a partition becomes active. The array contains one
431305 * of these structures for each potential channel connection to that partition.
432306 */
433
-
434
-/*
435
- * The following is sn2 only.
436
- *
437
- * Each channel structure manages two message queues (circular buffers).
438
- * They are allocated at the time a channel connection is made. One of
439
- * these message queues (local_msgqueue) holds the locally created messages
440
- * that are destined for the remote partition. The other of these message
441
- * queues (remote_msgqueue) is a locally cached copy of the remote partition's
442
- * own local_msgqueue.
443
- *
444
- * The following is a description of the Get/Put pointers used to manage these
445
- * two message queues. Consider the local_msgqueue to be on one partition
446
- * and the remote_msgqueue to be its cached copy on another partition. A
447
- * description of what each of the lettered areas contains is included.
448
- *
449
- *
450
- * local_msgqueue remote_msgqueue
451
- *
452
- * |/////////| |/////////|
453
- * w_remote_GP.get --> +---------+ |/////////|
454
- * | F | |/////////|
455
- * remote_GP.get --> +---------+ +---------+ <-- local_GP->get
456
- * | | | |
457
- * | | | E |
458
- * | | | |
459
- * | | +---------+ <-- w_local_GP.get
460
- * | B | |/////////|
461
- * | | |////D////|
462
- * | | |/////////|
463
- * | | +---------+ <-- w_remote_GP.put
464
- * | | |////C////|
465
- * local_GP->put --> +---------+ +---------+ <-- remote_GP.put
466
- * | | |/////////|
467
- * | A | |/////////|
468
- * | | |/////////|
469
- * w_local_GP.put --> +---------+ |/////////|
470
- * |/////////| |/////////|
471
- *
472
- *
473
- * ( remote_GP.[get|put] are cached copies of the remote
474
- * partition's local_GP->[get|put], and thus their values can
475
- * lag behind their counterparts on the remote partition. )
476
- *
477
- *
478
- * A - Messages that have been allocated, but have not yet been sent to the
479
- * remote partition.
480
- *
481
- * B - Messages that have been sent, but have not yet been acknowledged by the
482
- * remote partition as having been received.
483
- *
484
- * C - Area that needs to be prepared for the copying of sent messages, by
485
- * the clearing of the message flags of any previously received messages.
486
- *
487
- * D - Area into which sent messages are to be copied from the remote
488
- * partition's local_msgqueue and then delivered to their intended
489
- * recipients. [ To allow for a multi-message copy, another pointer
490
- * (next_msg_to_pull) has been added to keep track of the next message
491
- * number needing to be copied (pulled). It chases after w_remote_GP.put.
492
- * Any messages lying between w_local_GP.get and next_msg_to_pull have
493
- * been copied and are ready to be delivered. ]
494
- *
495
- * E - Messages that have been copied and delivered, but have not yet been
496
- * acknowledged by the recipient as having been received.
497
- *
498
- * F - Messages that have been acknowledged, but XPC has not yet notified the
499
- * sender that the message was received by its intended recipient.
500
- * This is also an area that needs to be prepared for the allocating of
501
- * new messages, by the clearing of the message flags of the acknowledged
502
- * messages.
503
- */
504
-
505
-struct xpc_channel_sn2 {
506
- struct xpc_openclose_args *local_openclose_args; /* args passed on */
507
- /* opening or closing of channel */
508
-
509
- void *local_msgqueue_base; /* base address of kmalloc'd space */
510
- struct xpc_msg_sn2 *local_msgqueue; /* local message queue */
511
- void *remote_msgqueue_base; /* base address of kmalloc'd space */
512
- struct xpc_msg_sn2 *remote_msgqueue; /* cached copy of remote */
513
- /* partition's local message queue */
514
- unsigned long remote_msgqueue_pa; /* phys addr of remote partition's */
515
- /* local message queue */
516
-
517
- struct xpc_notify_sn2 *notify_queue;/* notify queue for messages sent */
518
-
519
- /* various flavors of local and remote Get/Put values */
520
-
521
- struct xpc_gp_sn2 *local_GP; /* local Get/Put values */
522
- struct xpc_gp_sn2 remote_GP; /* remote Get/Put values */
523
- struct xpc_gp_sn2 w_local_GP; /* working local Get/Put values */
524
- struct xpc_gp_sn2 w_remote_GP; /* working remote Get/Put values */
525
- s64 next_msg_to_pull; /* Put value of next msg to pull */
526
-
527
- struct mutex msg_to_pull_mutex; /* next msg to pull serialization */
528
-};
529307
530308 struct xpc_channel_uv {
531309 void *cached_notify_gru_mq_desc; /* remote partition's notify mq's */
....@@ -579,7 +357,6 @@
579357 wait_queue_head_t idle_wq; /* idle kthread wait queue */
580358
581359 union {
582
- struct xpc_channel_sn2 sn2;
583360 struct xpc_channel_uv uv;
584361 } sn;
585362
....@@ -666,43 +443,6 @@
666443 return 0;
667444 }
668445
669
-/*
670
- * Manage channels on a partition basis. There is one of these structures
671
- * for each partition (a partition will never utilize the structure that
672
- * represents itself).
673
- */
674
-
675
-struct xpc_partition_sn2 {
676
- unsigned long remote_amos_page_pa; /* paddr of partition's amos page */
677
- int activate_IRQ_nasid; /* active partition's act/deact nasid */
678
- int activate_IRQ_phys_cpuid; /* active part's act/deact phys cpuid */
679
-
680
- unsigned long remote_vars_pa; /* phys addr of partition's vars */
681
- unsigned long remote_vars_part_pa; /* paddr of partition's vars part */
682
- u8 remote_vars_version; /* version# of partition's vars */
683
-
684
- void *local_GPs_base; /* base address of kmalloc'd space */
685
- struct xpc_gp_sn2 *local_GPs; /* local Get/Put values */
686
- void *remote_GPs_base; /* base address of kmalloc'd space */
687
- struct xpc_gp_sn2 *remote_GPs; /* copy of remote partition's local */
688
- /* Get/Put values */
689
- unsigned long remote_GPs_pa; /* phys addr of remote partition's local */
690
- /* Get/Put values */
691
-
692
- void *local_openclose_args_base; /* base address of kmalloc'd space */
693
- struct xpc_openclose_args *local_openclose_args; /* local's args */
694
- unsigned long remote_openclose_args_pa; /* phys addr of remote's args */
695
-
696
- int notify_IRQ_nasid; /* nasid of where to send notify IRQs */
697
- int notify_IRQ_phys_cpuid; /* CPUID of where to send notify IRQs */
698
- char notify_IRQ_owner[8]; /* notify IRQ's owner's name */
699
-
700
- struct amo *remote_chctl_amo_va; /* addr of remote chctl flags' amo */
701
- struct amo *local_chctl_amo_va; /* address of chctl flags' amo */
702
-
703
- struct timer_list dropped_notify_IRQ_timer; /* dropped IRQ timer */
704
-};
705
-
706446 struct xpc_partition_uv {
707447 unsigned long heartbeat_gpa; /* phys addr of partition's heartbeat */
708448 struct xpc_heartbeat_uv cached_heartbeat; /* cached copy of */
....@@ -774,7 +514,6 @@
774514 wait_queue_head_t channel_mgr_wq; /* channel mgr's wait queue */
775515
776516 union {
777
- struct xpc_partition_sn2 sn2;
778517 struct xpc_partition_uv uv;
779518 } sn;
780519
....@@ -854,14 +593,6 @@
854593 #define XPC_P_SS_WTEARDOWN 0x02 /* waiting to teardown infrastructure */
855594 #define XPC_P_SS_TORNDOWN 0x03 /* infrastructure is torndown */
856595
857
-/*
858
- * struct xpc_partition_sn2's dropped notify IRQ timer is set to wait the
859
- * following interval #of seconds before checking for dropped notify IRQs.
860
- * These can occur whenever an IRQ's associated amo write doesn't complete
861
- * until after the IRQ was received.
862
- */
863
-#define XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL (0.25 * HZ)
864
-
865596 /* number of seconds to wait for other partitions to disengage */
866597 #define XPC_DISENGAGE_DEFAULT_TIMELIMIT 90
867598
....@@ -887,10 +618,6 @@
887618 extern void xpc_activate_kthreads(struct xpc_channel *, int);
888619 extern void xpc_create_kthreads(struct xpc_channel *, int, int);
889620 extern void xpc_disconnect_wait(int);
890
-
891
-/* found in xpc_sn2.c */
892
-extern int xpc_init_sn2(void);
893
-extern void xpc_exit_sn2(void);
894621
895622 /* found in xpc_uv.c */
896623 extern int xpc_init_uv(void);