git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Change of vterm handling logic on backend chardev input event (#40)
[lunaix-os.git]
/
lunaix-os
/
kernel
/
device
/
device.c
diff --git
a/lunaix-os/kernel/device/device.c
b/lunaix-os/kernel/device/device.c
index b88f8f6c283ea311fb3e524059f67a6eabe3d143..d32ca32bada4c093e47e728ec8a6836db9d22d22 100644
(file)
--- a/
lunaix-os/kernel/device/device.c
+++ b/
lunaix-os/kernel/device/device.c
@@
-77,6
+77,7
@@
device_create(struct device* dev,
dev->dev_type = type;
device_init_meta(dev_meta(dev), parent, DEV_STRUCT);
dev->dev_type = type;
device_init_meta(dev_meta(dev), parent, DEV_STRUCT);
+ llist_init_head(&dev->capabilities);
mutex_init(&dev->lock);
iopoll_init_evt_q(&dev->pollers);
}
mutex_init(&dev->lock);
iopoll_init_evt_q(&dev->pollers);
}
@@
-291,17
+292,21
@@
device_alert_poller(struct device* dev, int poll_evt)
iopoll_wake_pollers(&dev->pollers);
}
iopoll_wake_pollers(&dev->pollers);
}
-__DEFINE_LXSYSCALL3(int, ioctl, int, fd, int, req,
va_list,
args)
+__DEFINE_LXSYSCALL3(int, ioctl, int, fd, int, req,
sc_va_list, _
args)
{
int errno = -1;
struct v_fd* fd_s;
{
int errno = -1;
struct v_fd* fd_s;
+ va_list args;
+
+ convert_valist(&args, _args);
+
if ((errno &= vfs_getfd(fd, &fd_s))) {
goto done;
}
if ((errno &= vfs_getfd(fd, &fd_s))) {
goto done;
}
- struct device* dev =
(struct device*)fd_s->file->inode->data
;
- if (valid_device_subtype_ref(dev, DEV_STRUCT)) {
- errno
&
= ENODEV;
+ struct device* dev =
resolve_device(fd_s->file->inode->data)
;
+ if (
!
valid_device_subtype_ref(dev, DEV_STRUCT)) {
+ errno = ENODEV;
goto done;
}
goto done;
}
@@
-312,11
+317,11
@@
__DEFINE_LXSYSCALL3(int, ioctl, int, fd, int, req, va_list, args)
}
if (!dev->ops.exec_cmd) {
}
if (!dev->ops.exec_cmd) {
- errno
&
= ENOTSUP;
+ errno = ENOTSUP;
goto done;
}
goto done;
}
- errno
&
= dev->ops.exec_cmd(dev, req, args);
+ errno = dev->ops.exec_cmd(dev, req, args);
done:
return DO_STATUS_OR_RETURN(errno);
done:
return DO_STATUS_OR_RETURN(errno);