⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 core.c

📁 xenomai 很好的linux实时补丁
💻 C
📖 第 1 页 / 共 3 页
字号:
ssize_t _rtdm_recvmsg(rtdm_user_info_t *user_info, int fd, struct msghdr *msg,                  int flags){    MAJOR_FUNCTION_WRAPPER(recvmsg, msg, flags);}ssize_t _rtdm_sendmsg(rtdm_user_info_t *user_info, int fd,                  const struct msghdr *msg, int flags){    MAJOR_FUNCTION_WRAPPER(sendmsg, msg, flags);}int __init rtdm_core_init(void){    int i;    fildes_table = (struct rtdm_fildes *)        kmalloc(fd_count * sizeof(struct rtdm_fildes), GFP_KERNEL);    if (!fildes_table)        return -ENOMEM;    memset(fildes_table, 0, fd_count * sizeof(struct rtdm_fildes));    for (i = 0; i < fd_count-1; i++)        fildes_table[i].next = &fildes_table[i+1];    free_fildes = &fildes_table[0];    return 0;}#ifdef DOXYGEN_CPP /* Only used for doxygen doc generation *//** * @brief Increment context reference counter * * @param[in] context Device context * * @note rtdm_context_get() automatically increments the lock counter. You * only need to call this function in special scenrios. * * Environments: * * This service can be called from: * * - Kernel module initialization/cleanup code * - Interrupt service routine * - Kernel-based task * - User-space task (RT, non-RT) * * Rescheduling: never. */void rtdm_context_lock(struct rtdm_dev_context *context);/** * @brief Decrement context reference counter * * @param[in] context Device context * * @note Every successful call to rtdm_context_get() must be matched by a * rtdm_context_unlock() invocation. * * Environments: * * This service can be called from: * * - Kernel module initialization/cleanup code * - Interrupt service routine * - Kernel-based task * - User-space task (RT, non-RT) * * Rescheduling: never. */void rtdm_context_unlock(struct rtdm_dev_context *context);/** * @brief Open a device * * Refer to rt_dev_open() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_open(const char *path, int oflag, ...);/** * @brief Create a socket * * Refer to rt_dev_socket() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_socket(int protocol_family, int socket_type, int protocol);/** * @brief Close a device or socket * * Refer to rt_dev_close() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_close(int fd);/** * @brief Issue an IOCTL * * Refer to rt_dev_ioctl() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_ioctl(int fd, int request, ...);/** * @brief Read from device * * Refer to rt_dev_read() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */ssize_t rtdm_read(int fd, void *buf, size_t nbyte);/** * @brief Write to device * * Refer to rt_dev_write() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */ssize_t rtdm_write(int fd, const void *buf, size_t nbyte);/** * @brief Receive message from socket * * Refer to rt_dev_recvmsg() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */ssize_t rtdm_recvmsg(int fd, struct msghdr *msg, int flags);/** * @brief Receive message from socket * * Refer to rt_dev_recvfrom() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */ssize_t rtdm_recvfrom(int fd, void *buf, size_t len, int flags,                      struct sockaddr *from, socklen_t *fromlen);/** * @brief Receive message from socket * * Refer to rt_dev_recv() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */ssize_t rtdm_recv(int fd, void *buf, size_t len, int flags);/** * @brief Transmit message to socket * * Refer to rt_dev_sendmsg() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */ssize_t rtdm_sendmsg(int fd, const struct msghdr *msg, int flags);/** * @brief Transmit message to socket * * Refer to rt_dev_sendto() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */ssize_t rtdm_sendto(int fd, const void *buf, size_t len, int flags,                    const struct sockaddr *to, socklen_t tolen);/** * @brief Transmit message to socket * * Refer to rt_dev_send() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */ssize_t rtdm_send(int fd, const void *buf, size_t len, int flags);/** * @brief Bind to local address * * Refer to rt_dev_bind() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_bind(int fd, const struct sockaddr *my_addr, socklen_t addrlen);/** * @brief Connect to remote address * * Refer to rt_dev_connect() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_connect(int fd, const struct sockaddr *serv_addr, socklen_t addrlen);/** * @brief Listen for incomming connection requests * * Refer to rt_dev_listen() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_listen(int fd, int backlog);/** * @brief Accept a connection requests * * Refer to rt_dev_accept() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_accept(int fd, struct sockaddr *addr, socklen_t *addrlen);/** * @brief Shut down parts of a connection * * Refer to rt_dev_shutdown() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_shutdown(int fd, int how);/** * @brief Get socket option * * Refer to rt_dev_getsockopt() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_getsockopt(int fd, int level, int optname, void *optval,                    socklen_t *optlen);/** * @brief Set socket option * * Refer to rt_dev_setsockopt() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_setsockopt(int fd, int level, int optname, const void *optval,                    socklen_t optlen);/** * @brief Get local socket address * * Refer to rt_dev_getsockname() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_getsockname(int fd, struct sockaddr *name, socklen_t *namelen);/** * @brief Get socket destination address * * Refer to rt_dev_getpeername() for parameters and return values * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. */int rtdm_getpeername(int fd, struct sockaddr *name, socklen_t *namelen);/** @} *//*! * @addtogroup userapi * @{ *//** * @brief Open a device * * @param[in] path Device name * @param[in] oflag Open flags * @param ... Further parameters will be ignored. * * @return Positive file descriptor value on success, otherwise a negative * error code. * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. * * @see @c open() in IEEE Std 1003.1, * http://www.opengroup.org/onlinepubs/009695399 */int rt_dev_open(const char *path, int oflag, ...);/** * @brief Create a socket * * @param[in] protocol_family Protocol family (@c PF_xxx) * @param[in] socket_type Socket type (@c SOCK_xxx) * @param[in] protocol Protocol ID, 0 for default * * @return Positive file descriptor value on success, otherwise a negative * error code. * * Environments: * * Depends on driver implementation, see @ref profiles "Device Profiles". * * Rescheduling: possible. * * @see @c socket() in IEEE Std 1003.1, * http://www.opengroup.org/onlinepubs/009695399 */int rt_dev_socket(int protocol_family, int socket_type, int protocol);/** * @brief Close a device or socket * * @param[in] fd File descriptor as returned by rt_dev_open() or rt_dev_socket() * * @return 0 on success, otherwise a negative error code. * * @note If the matching rt_dev_open() or rt_dev_socket() call took place in * non-real-time context, rt_dev_close() must be issued within non-real-time

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -