blob: 83108c099696e803a86263a5e2fce8cc3ee21744 [file] [log] [blame]
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +02001.. SPDX-License-Identifier: GPL-2.0
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +02002
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +02003==========
4spu_create
5==========
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +02006
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +02007Name
8====
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +02009 spu_create - create a new spu context
10
11
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +020012Synopsis
13========
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +020014
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +020015 ::
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +020016
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +020017 #include <sys/types.h>
18 #include <sys/spu.h>
19
20 int spu_create(const char *pathname, int flags, mode_t mode);
21
22Description
23===========
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +020024 The spu_create system call is used on PowerPC machines that implement
25 the Cell Broadband Engine Architecture in order to access Synergistic
26 Processor Units (SPUs). It creates a new logical context for an SPU in
27 pathname and returns a handle to associated with it. pathname must
28 point to a non-existing directory in the mount point of the SPU file
29 system (spufs). When spu_create is successful, a directory gets cre-
30 ated on pathname and it is populated with files.
31
32 The returned file handle can only be passed to spu_run(2) or closed,
33 other operations are not defined on it. When it is closed, all associ-
34 ated directory entries in spufs are removed. When the last file handle
35 pointing either inside of the context directory or to this file
36 descriptor is closed, the logical SPU context is destroyed.
37
38 The parameter flags can be zero or any bitwise or'd combination of the
39 following constants:
40
41 SPU_RAWIO
42 Allow mapping of some of the hardware registers of the SPU into
43 user space. This flag requires the CAP_SYS_RAWIO capability, see
44 capabilities(7).
45
46 The mode parameter specifies the permissions used for creating the new
47 directory in spufs. mode is modified with the user's umask(2) value
48 and then used for both the directory and the files contained in it. The
49 file permissions mask out some more bits of mode because they typically
50 support only read or write access. See stat(2) for a full list of the
51 possible mode values.
52
53
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +020054Return Value
55============
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +020056 spu_create returns a new file descriptor. It may return -1 to indicate
57 an error condition and set errno to one of the error codes listed
58 below.
59
60
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +020061Errors
62======
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +020063 EACCES
64 The current user does not have write access on the spufs mount
65 point.
66
67 EEXIST An SPU context already exists at the given path name.
68
69 EFAULT pathname is not a valid string pointer in the current address
70 space.
71
72 EINVAL pathname is not a directory in the spufs mount point.
73
74 ELOOP Too many symlinks were found while resolving pathname.
75
76 EMFILE The process has reached its maximum open file limit.
77
78 ENAMETOOLONG
79 pathname was too long.
80
81 ENFILE The system has reached the global open file limit.
82
83 ENOENT Part of pathname could not be resolved.
84
85 ENOMEM The kernel could not allocate all resources required.
86
87 ENOSPC There are not enough SPU resources available to create a new
88 context or the user specific limit for the number of SPU con-
89 texts has been reached.
90
91 ENOSYS the functionality is not provided by the current system, because
92 either the hardware does not provide SPUs or the spufs module is
93 not loaded.
94
95 ENOTDIR
96 A part of pathname is not a directory.
97
98
99
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +0200100Notes
101=====
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +0200102 spu_create is meant to be used from libraries that implement a more
103 abstract interface to SPUs, not to be used from regular applications.
104 See http://www.bsc.es/projects/deepcomputing/linuxoncell/ for the rec-
105 ommended libraries.
106
107
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +0200108Files
109=====
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +0200110 pathname must point to a location beneath the mount point of spufs. By
111 convention, it gets mounted in /spu.
112
113
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +0200114Conforming to
115=============
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +0200116 This call is Linux specific and only implemented by the ppc64 architec-
117 ture. Programs using this system call are not portable.
118
119
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +0200120Bugs
121====
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +0200122 The code does not yet fully implement all features lined out here.
123
124
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +0200125Author
126======
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +0200127 Arnd Bergmann <arndb@de.ibm.com>
128
Mauro Carvalho Chehabdc3f0432020-04-27 23:17:14 +0200129See Also
130========
Mauro Carvalho Chehaba5a1c342020-04-27 23:17:13 +0200131 capabilities(7), close(2), spu_run(2), spufs(7)