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
56be3c21
Commit
56be3c21
authored
Nov 09, 2002
by
Anton Blanchard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ppc64: merge some ioctl32.c changes from sparc64
parent
32d62496
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
363 additions
and
3 deletions
+363
-3
arch/ppc64/kernel/ioctl32.c
arch/ppc64/kernel/ioctl32.c
+363
-3
No files found.
arch/ppc64/kernel/ioctl32.c
View file @
56be3c21
...
...
@@ -58,6 +58,7 @@
#include <linux/netdevice.h>
#include <linux/raw.h>
#include <linux/smb_fs.h>
#include <linux/ncp_fs.h>
#include <linux/blkpg.h>
#include <linux/blk.h>
#include <linux/elevator.h>
...
...
@@ -823,12 +824,40 @@ static int hdio_getgeo(unsigned int fd, unsigned int cmd, unsigned long arg)
err
=
sys_ioctl
(
fd
,
HDIO_GETGEO
,
(
unsigned
long
)
&
geo
);
set_fs
(
old_fs
);
if
(
!
err
)
{
err
=
copy_to_user
((
struct
hd_geometry32
*
)
arg
,
&
geo
,
4
);
err
|=
__put_user
(
geo
.
start
,
&
(((
struct
hd_geometry32
*
)
arg
)
->
start
));
if
(
copy_to_user
((
struct
hd_geometry32
*
)
arg
,
&
geo
,
4
)
||
__put_user
(
geo
.
start
,
&
(((
struct
hd_geometry32
*
)
arg
)
->
start
)))
err
=
-
EFAULT
;
}
return
err
?
-
EFAULT
:
0
;
return
err
;
}
struct
hd_big_geometry32
{
unsigned
char
heads
;
unsigned
char
sectors
;
unsigned
int
cylinders
;
u32
start
;
};
static
int
hdio_getgeo_big
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
mm_segment_t
old_fs
=
get_fs
();
struct
hd_big_geometry
geo
;
int
err
;
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
cmd
,
(
unsigned
long
)
&
geo
);
set_fs
(
old_fs
);
if
(
!
err
)
{
struct
hd_big_geometry32
*
up
=
(
struct
hd_big_geometry32
*
)
arg
;
if
(
put_user
(
geo
.
heads
,
&
up
->
heads
)
||
__put_user
(
geo
.
sectors
,
&
up
->
sectors
)
||
__put_user
(
geo
.
cylinders
,
&
up
->
cylinders
)
||
__put_user
(((
u32
)
geo
.
start
),
&
up
->
start
))
err
=
-
EFAULT
;
}
return
err
;
}
static
int
hdio_ioctl_trans
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
...
...
@@ -2034,6 +2063,306 @@ static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long a
return
err
;
}
struct
ncp_ioctl_request_32
{
unsigned
int
function
;
unsigned
int
size
;
__kernel_caddr_t32
data
;
};
struct
ncp_fs_info_v2_32
{
int
version
;
unsigned
int
mounted_uid
;
unsigned
int
connection
;
unsigned
int
buffer_size
;
unsigned
int
volume_number
;
__u32
directory_id
;
__u32
dummy1
;
__u32
dummy2
;
__u32
dummy3
;
};
struct
ncp_objectname_ioctl_32
{
int
auth_type
;
unsigned
int
object_name_len
;
__kernel_caddr_t32
object_name
;
/* an userspace data, in most cases user name */
};
struct
ncp_privatedata_ioctl_32
{
unsigned
int
len
;
__kernel_caddr_t32
data
;
/* ~1000 for NDS */
};
#define NCP_IOC_NCPREQUEST_32 _IOR('n', 1, struct ncp_ioctl_request_32)
#define NCP_IOC_GETMOUNTUID2_32 _IOW('n', 2, unsigned int)
#define NCP_IOC_GET_FS_INFO_V2_32 _IOWR('n', 4, struct ncp_fs_info_v2_32)
#define NCP_IOC_GETOBJECTNAME_32 _IOWR('n', 9, struct ncp_objectname_ioctl_32)
#define NCP_IOC_SETOBJECTNAME_32 _IOR('n', 9, struct ncp_objectname_ioctl_32)
#define NCP_IOC_GETPRIVATEDATA_32 _IOWR('n', 10, struct ncp_privatedata_ioctl_32)
#define NCP_IOC_SETPRIVATEDATA_32 _IOR('n', 10, struct ncp_privatedata_ioctl_32)
static
int
do_ncp_ncprequest
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
ncp_ioctl_request_32
n32
;
struct
ncp_ioctl_request
n
;
mm_segment_t
old_fs
;
int
err
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_ioctl_request_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
function
=
n32
.
function
;
n
.
size
=
n32
.
size
;
if
(
n
.
size
>
65536
)
return
-
EINVAL
;
n
.
data
=
vmalloc
(
65536
);
/* 65536 must be same as NCP_PACKET_SIZE_INTERNAL in ncpfs */
if
(
!
n
.
data
)
return
-
ENOMEM
;
err
=
-
EFAULT
;
if
(
copy_from_user
(
n
.
data
,
(
void
*
)
A
(
n32
.
data
),
n
.
size
))
goto
out
;
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_NCPREQUEST
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
if
(
err
<=
0
)
goto
out
;
if
(
err
>
65536
)
{
err
=
-
EINVAL
;
goto
out
;
}
if
(
copy_to_user
((
void
*
)
A
(
n32
.
data
),
n
.
data
,
err
))
{
err
=
-
EFAULT
;
goto
out
;
}
out:
vfree
(
n
.
data
);
return
err
;
}
static
int
do_ncp_getmountuid2
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
mm_segment_t
old_fs
=
get_fs
();
__kernel_uid_t
kuid
;
int
err
;
cmd
=
NCP_IOC_GETMOUNTUID2
;
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
cmd
,
(
unsigned
long
)
&
kuid
);
set_fs
(
old_fs
);
if
(
!
err
)
err
=
put_user
(
kuid
,
(
unsigned
int
*
)
arg
);
return
err
;
}
static
int
do_ncp_getfsinfo2
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
mm_segment_t
old_fs
=
get_fs
();
struct
ncp_fs_info_v2_32
n32
;
struct
ncp_fs_info_v2
n
;
int
err
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_fs_info_v2_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
if
(
n32
.
version
!=
NCP_GET_FS_INFO_VERSION_V2
)
return
-
EINVAL
;
n
.
version
=
NCP_GET_FS_INFO_VERSION_V2
;
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_GET_FS_INFO_V2
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
if
(
!
err
)
{
n32
.
version
=
n
.
version
;
n32
.
mounted_uid
=
n
.
mounted_uid
;
n32
.
connection
=
n
.
connection
;
n32
.
buffer_size
=
n
.
buffer_size
;
n32
.
volume_number
=
n
.
volume_number
;
n32
.
directory_id
=
n
.
directory_id
;
n32
.
dummy1
=
n
.
dummy1
;
n32
.
dummy2
=
n
.
dummy2
;
n32
.
dummy3
=
n
.
dummy3
;
err
=
copy_to_user
((
struct
ncp_fs_info_v2_32
*
)
arg
,
&
n32
,
sizeof
(
n32
))
?
-
EFAULT
:
0
;
}
return
err
;
}
static
int
do_ncp_getobjectname
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
ncp_objectname_ioctl_32
n32
;
struct
ncp_objectname_ioctl
n
;
mm_segment_t
old_fs
;
int
err
;
size_t
tl
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_objectname_ioctl_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
object_name_len
=
tl
=
n32
.
object_name_len
;
if
(
tl
)
{
n
.
object_name
=
kmalloc
(
tl
,
GFP_KERNEL
);
if
(
!
n
.
object_name
)
return
-
ENOMEM
;
}
else
{
n
.
object_name
=
NULL
;
}
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_GETOBJECTNAME
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
if
(
err
)
goto
out
;
if
(
tl
>
n
.
object_name_len
)
tl
=
n
.
object_name_len
;
err
=
-
EFAULT
;
if
(
tl
&&
copy_to_user
((
void
*
)
A
(
n32
.
object_name
),
n
.
object_name
,
tl
))
goto
out
;
n32
.
auth_type
=
n
.
auth_type
;
n32
.
object_name_len
=
n
.
object_name_len
;
if
(
copy_to_user
((
struct
ncp_objectname_ioctl_32
*
)
arg
,
&
n32
,
sizeof
(
n32
)))
goto
out
;
err
=
0
;
out:
if
(
n
.
object_name
)
kfree
(
n
.
object_name
);
return
err
;
}
static
int
do_ncp_setobjectname
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
ncp_objectname_ioctl_32
n32
;
struct
ncp_objectname_ioctl
n
;
mm_segment_t
old_fs
;
int
err
;
size_t
tl
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_objectname_ioctl_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
auth_type
=
n32
.
auth_type
;
n
.
object_name_len
=
tl
=
n32
.
object_name_len
;
if
(
tl
)
{
n
.
object_name
=
kmalloc
(
tl
,
GFP_KERNEL
);
if
(
!
n
.
object_name
)
return
-
ENOMEM
;
err
=
-
EFAULT
;
if
(
copy_from_user
(
n
.
object_name
,
(
void
*
)
A
(
n32
.
object_name
),
tl
))
goto
out
;
}
else
{
n
.
object_name
=
NULL
;
}
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_SETOBJECTNAME
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
out:
if
(
n
.
object_name
)
kfree
(
n
.
object_name
);
return
err
;
}
static
int
do_ncp_getprivatedata
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
ncp_privatedata_ioctl_32
n32
;
struct
ncp_privatedata_ioctl
n
;
mm_segment_t
old_fs
;
int
err
;
size_t
tl
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_privatedata_ioctl_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
len
=
tl
=
n32
.
len
;
if
(
tl
)
{
n
.
data
=
kmalloc
(
tl
,
GFP_KERNEL
);
if
(
!
n
.
data
)
return
-
ENOMEM
;
}
else
{
n
.
data
=
NULL
;
}
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_GETPRIVATEDATA
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
if
(
err
)
goto
out
;
if
(
tl
>
n
.
len
)
tl
=
n
.
len
;
err
=
-
EFAULT
;
if
(
tl
&&
copy_to_user
((
void
*
)
A
(
n32
.
data
),
n
.
data
,
tl
))
goto
out
;
n32
.
len
=
n
.
len
;
if
(
copy_to_user
((
struct
ncp_privatedata_ioctl_32
*
)
arg
,
&
n32
,
sizeof
(
n32
)))
goto
out
;
err
=
0
;
out:
if
(
n
.
data
)
kfree
(
n
.
data
);
return
err
;
}
static
int
do_ncp_setprivatedata
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
ncp_privatedata_ioctl_32
n32
;
struct
ncp_privatedata_ioctl
n
;
mm_segment_t
old_fs
;
int
err
;
size_t
tl
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_privatedata_ioctl_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
len
=
tl
=
n32
.
len
;
if
(
tl
)
{
n
.
data
=
kmalloc
(
tl
,
GFP_KERNEL
);
if
(
!
n
.
data
)
return
-
ENOMEM
;
err
=
-
EFAULT
;
if
(
copy_from_user
(
n
.
data
,
(
void
*
)
A
(
n32
.
data
),
tl
))
goto
out
;
}
else
{
n
.
data
=
NULL
;
}
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_SETPRIVATEDATA
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
out:
if
(
n
.
data
)
kfree
(
n
.
data
);
return
err
;
}
struct
atmif_sioc32
{
int
number
;
int
length
;
...
...
@@ -3848,6 +4177,18 @@ COMPATIBLE_IOCTL(RAW_SETBIND),
COMPATIBLE_IOCTL
(
RAW_GETBIND
),
/* SMB ioctls which do not need any translations */
COMPATIBLE_IOCTL
(
SMB_IOC_NEWCONN
),
/* NCP ioctls which do not need any translations */
COMPATIBLE_IOCTL
(
NCP_IOC_CONN_LOGGED_IN
),
COMPATIBLE_IOCTL
(
NCP_IOC_SIGN_INIT
),
COMPATIBLE_IOCTL
(
NCP_IOC_SIGN_WANTED
),
COMPATIBLE_IOCTL
(
NCP_IOC_SET_SIGN_WANTED
),
COMPATIBLE_IOCTL
(
NCP_IOC_LOCKUNLOCK
),
COMPATIBLE_IOCTL
(
NCP_IOC_GETROOT
),
COMPATIBLE_IOCTL
(
NCP_IOC_SETROOT
),
COMPATIBLE_IOCTL
(
NCP_IOC_GETCHARSETS
),
COMPATIBLE_IOCTL
(
NCP_IOC_SETCHARSETS
),
COMPATIBLE_IOCTL
(
NCP_IOC_GETDENTRYTTL
),
COMPATIBLE_IOCTL
(
NCP_IOC_SETDENTRYTTL
),
/* Little a */
COMPATIBLE_IOCTL
(
ATMSIGD_CTRL
),
COMPATIBLE_IOCTL
(
ATMARPD_CTRL
),
...
...
@@ -3903,10 +4244,20 @@ COMPATIBLE_IOCTL(RNDCLEARPOOL),
COMPATIBLE_IOCTL
(
HCIDEVUP
),
COMPATIBLE_IOCTL
(
HCIDEVDOWN
),
COMPATIBLE_IOCTL
(
HCIDEVRESET
),
COMPATIBLE_IOCTL
(
HCIDEVRESTAT
),
COMPATIBLE_IOCTL
(
HCIGETDEVLIST
),
COMPATIBLE_IOCTL
(
HCIGETDEVINFO
),
COMPATIBLE_IOCTL
(
HCIGETCONNLIST
),
COMPATIBLE_IOCTL
(
HCIGETCONNINFO
),
COMPATIBLE_IOCTL
(
HCISETRAW
),
COMPATIBLE_IOCTL
(
HCISETSCAN
),
COMPATIBLE_IOCTL
(
HCISETAUTH
),
COMPATIBLE_IOCTL
(
HCISETENCRYPT
),
COMPATIBLE_IOCTL
(
HCISETPTYPE
),
COMPATIBLE_IOCTL
(
HCISETLINKPOL
),
COMPATIBLE_IOCTL
(
HCISETLINKMODE
),
COMPATIBLE_IOCTL
(
HCISETACLMTU
),
COMPATIBLE_IOCTL
(
HCISETSCOMTU
),
COMPATIBLE_IOCTL
(
HCIINQUIRY
),
COMPATIBLE_IOCTL
(
PCIIOC_CONTROLLER
),
COMPATIBLE_IOCTL
(
PCIIOC_MMAP_IS_IO
),
...
...
@@ -4001,6 +4352,7 @@ HANDLE_IOCTL(SIOCDELRT, routing_ioctl),
HANDLE_IOCTL
(
SIOCRTMSG
,
ret_einval
),
HANDLE_IOCTL
(
SIOCGSTAMP
,
do_siocgstamp
),
HANDLE_IOCTL
(
HDIO_GETGEO
,
hdio_getgeo
),
HANDLE_IOCTL
(
HDIO_GETGEO_BIG_RAW
,
hdio_getgeo_big
),
HANDLE_IOCTL
(
BLKGETSIZE
,
w_long
),
HANDLE_IOCTL
(
0x1260
,
broken_blkgetsize
),
HANDLE_IOCTL
(
BLKSECTGET
,
w_long
),
...
...
@@ -4061,6 +4413,14 @@ HANDLE_IOCTL(VIDIOCGFREQ32, do_video_ioctl),
HANDLE_IOCTL
(
VIDIOCSFREQ32
,
do_video_ioctl
),
/* One SMB ioctl needs translations. */
HANDLE_IOCTL
(
SMB_IOC_GETMOUNTUID_32
,
do_smb_getmountuid
),
/* NCPFS */
HANDLE_IOCTL
(
NCP_IOC_NCPREQUEST_32
,
do_ncp_ncprequest
),
HANDLE_IOCTL
(
NCP_IOC_GETMOUNTUID2_32
,
do_ncp_getmountuid2
),
HANDLE_IOCTL
(
NCP_IOC_GET_FS_INFO_V2_32
,
do_ncp_getfsinfo2
),
HANDLE_IOCTL
(
NCP_IOC_GETOBJECTNAME_32
,
do_ncp_getobjectname
),
HANDLE_IOCTL
(
NCP_IOC_SETOBJECTNAME_32
,
do_ncp_setobjectname
),
HANDLE_IOCTL
(
NCP_IOC_GETPRIVATEDATA_32
,
do_ncp_getprivatedata
),
HANDLE_IOCTL
(
NCP_IOC_SETPRIVATEDATA_32
,
do_ncp_setprivatedata
),
HANDLE_IOCTL
(
ATM_GETLINKRATE32
,
do_atm_ioctl
),
HANDLE_IOCTL
(
ATM_GETNAMES32
,
do_atm_ioctl
),
HANDLE_IOCTL
(
ATM_GETTYPE32
,
do_atm_ioctl
),
...
...
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