patch-2.1.23 linux/arch/sparc/ap1000/sync.c
Next file: linux/arch/sparc/ap1000/timer.c
Previous file: linux/arch/sparc/ap1000/msc.c
Back to the patch index
Back to the overall index
- Lines: 56
- Date:
Sun Jan 26 12:07:06 1997
- Orig file:
v2.1.22/linux/arch/sparc/ap1000/sync.c
- Orig date:
Thu Jan 1 02:00:00 1970
diff -u --recursive --new-file v2.1.22/linux/arch/sparc/ap1000/sync.c linux/arch/sparc/ap1000/sync.c
@@ -0,0 +1,55 @@
+ /*
+ * Copyright 1996 The Australian National University.
+ * Copyright 1996 Fujitsu Laboratories Limited
+ *
+ * This software may be distributed under the terms of the Gnu
+ * Public License version 2 or later
+ */
+/* sync functions using the Tnet */
+
+#include <asm/ap1000/apreg.h>
+#include <linux/mm.h>
+#include <linux/sched.h>
+#include <linux/tasks.h>
+
+extern int cap_cid0;
+extern unsigned _ncel, _ncelx, _ncely, _cid;
+
+static volatile int sync_flags[MPP_NUM_TASKS];
+
+
+int ap_sync(int numcells, int *phys_map)
+{
+ int basecell;
+ int i,err;
+ int tsk = current->taskid;
+
+ if (numcells < 2) return 0;
+
+ if (!MPP_IS_PAR_TASK(tsk)) {
+ printk("nonparallel task %d called ap_sync\n",tsk);
+ return 0;
+ }
+ tsk -= MPP_TASK_BASE;
+
+ basecell = phys_map[0];
+ if (cap_cid0 == basecell) {
+ if ((err=wait_on_int(&sync_flags[tsk],numcells-1,5)))
+ return err;
+ sync_flags[tsk] = 0;
+ if (numcells == _ncel) {
+ ap_bput(0,0,0,&sync_flags[tsk],0);
+ } else {
+ for (i=1;i<numcells;i++)
+ ap_put(phys_map[i],0,0,0,&sync_flags[tsk],0);
+ }
+ return 0;
+ }
+
+ ap_put(basecell,0,0,0,&sync_flags[tsk],0);
+ if ((err=wait_on_int(&sync_flags[tsk],1,5)))
+ return err;
+ sync_flags[tsk] = 0;
+ return 0;
+}
+
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov