Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
41790e04
Commit
41790e04
authored
Jul 27, 2007
by
Ralf Baechle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[MIPS] RP: Pass number of TCs available to RP program in $2.
Signed-off-by:
Ralf Baechle
<
ralf@linux-mips.org
>
parent
07cc0c9e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
73 additions
and
9 deletions
+73
-9
arch/mips/kernel/vpe.c
arch/mips/kernel/vpe.c
+73
-9
No files found.
arch/mips/kernel/vpe.c
View file @
41790e04
...
...
@@ -64,6 +64,10 @@ typedef void *vpe_handle;
/* If this is set, the section belongs in the init part of the module */
#define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1))
/*
* The number of TCs and VPEs physically available on the core
*/
static
int
hw_tcs
,
hw_vpes
;
static
char
module_name
[]
=
"vpe"
;
static
int
major
;
static
const
int
minor
=
1
;
/* fixed for now */
...
...
@@ -126,6 +130,8 @@ struct vpe {
/* the list of who wants to know when something major happens */
struct
list_head
notify
;
unsigned
int
ntcs
;
};
struct
tc
{
...
...
@@ -738,6 +744,7 @@ static int vpe_run(struct vpe * v)
* here... Or set $a3 to zero and define DFLT_STACK_SIZE and
* DFLT_HEAP_SIZE when you compile your program
*/
mttgpr
(
6
,
v
->
ntcs
);
mttgpr
(
7
,
physical_memsize
);
/* set up VPE1 */
...
...
@@ -1333,16 +1340,60 @@ static void kspd_sp_exit( int sp_id)
}
#endif
static
struct
device
*
vpe_dev
;
static
ssize_t
show_ntcs
(
struct
class_device
*
cd
,
char
*
buf
)
{
struct
vpe
*
vpe
=
get_vpe
(
tclimit
);
return
sprintf
(
buf
,
"%d
\n
"
,
vpe
->
ntcs
);
}
static
ssize_t
store_ntcs
(
struct
class_device
*
dev
,
const
char
*
buf
,
size_t
len
)
{
struct
vpe
*
vpe
=
get_vpe
(
tclimit
);
unsigned
long
new
;
char
*
endp
;
new
=
simple_strtoul
(
buf
,
&
endp
,
0
);
if
(
endp
==
buf
)
goto
out_einval
;
if
(
new
==
0
||
new
>
(
hw_tcs
-
tclimit
))
goto
out_einval
;
vpe
->
ntcs
=
new
;
return
len
;
out_einval:
return
-
EINVAL
;;
}
static
struct
class_device_attribute
vpe_class_attributes
[]
=
{
__ATTR
(
ntcs
,
S_IRUGO
|
S_IWUSR
,
show_ntcs
,
store_ntcs
),
{}
};
static
void
vpe_class_device_release
(
struct
class_device
*
cd
)
{
kfree
(
cd
);
}
struct
class
vpe_class
=
{
.
name
=
"vpe"
,
.
owner
=
THIS_MODULE
,
.
release
=
vpe_class_device_release
,
.
class_dev_attrs
=
vpe_class_attributes
,
};
struct
class_device
vpe_device
;
static
int
__init
vpe_module_init
(
void
)
{
unsigned
int
mtflags
,
vpflags
;
int
hw_tcs
,
hw_vpes
,
tc
,
err
=
0
;
unsigned
long
flags
,
val
;
struct
vpe
*
v
=
NULL
;
struct
device
*
dev
;
struct
tc
*
t
;
int
tc
,
err
;
if
(
!
cpu_has_mipsmt
)
{
printk
(
"VPE loader: not a MIPS MT capable processor
\n
"
);
...
...
@@ -1371,13 +1422,22 @@ static int __init vpe_module_init(void)
return
major
;
}
dev
=
device_create
(
mt_class
,
NULL
,
MKDEV
(
major
,
minor
),
"vpe%d"
,
minor
);
if
(
IS_ERR
(
dev
))
{
err
=
PTR_ERR
(
dev
);
err
=
class_register
(
&
vpe_class
);
if
(
err
)
{
printk
(
KERN_ERR
"vpe_class registration failed
\n
"
);
goto
out_chrdev
;
}
vpe_dev
=
dev
;
class_device_initialize
(
&
vpe_device
);
vpe_device
.
class
=
&
vpe_class
,
vpe_device
.
parent
=
NULL
,
strlcpy
(
vpe_device
.
class_id
,
"vpe1"
,
BUS_ID_SIZE
);
vpe_device
.
devt
=
MKDEV
(
major
,
minor
);
err
=
class_device_add
(
&
vpe_device
);
if
(
err
)
{
printk
(
KERN_ERR
"Adding vpe_device failed
\n
"
);
goto
out_class
;
}
local_irq_save
(
flags
);
mtflags
=
dmt
();
...
...
@@ -1422,6 +1482,8 @@ static int __init vpe_module_init(void)
goto
out_reenable
;
}
v
->
ntcs
=
hw_tcs
-
tclimit
;
/* add the tc to the list of this vpe's tc's. */
list_add
(
&
t
->
tc
,
&
v
->
tc
);
...
...
@@ -1497,6 +1559,8 @@ static int __init vpe_module_init(void)
#endif
return
0
;
out_class:
class_unregister
(
&
vpe_class
);
out_chrdev:
unregister_chrdev
(
major
,
module_name
);
...
...
@@ -1514,7 +1578,7 @@ static void __exit vpe_module_exit(void)
}
}
device_destroy
(
mt_class
,
MKDEV
(
major
,
minor
)
);
class_device_del
(
&
vpe_device
);
unregister_chrdev
(
major
,
module_name
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment