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
Kirill Smelkov
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