/** Initialize an RTDM device. * * \return Zero on success, otherwise a negative error code. */ int ec_rtdm_dev_init( ec_rtdm_dev_t *rtdm_dev, /**< EtherCAT RTDM device. */ ec_master_t *master /**< EtherCAT master. */ ) { int ret; rtdm_dev->master = master; rtdm_dev->dev = kzalloc(sizeof(struct rtdm_device), GFP_KERNEL); if (!rtdm_dev->dev) { EC_MASTER_ERR(master, "Failed to reserve memory for RTDM device.\n"); return -ENOMEM; } rtdm_dev->dev->struct_version = RTDM_DEVICE_STRUCT_VER; rtdm_dev->dev->device_flags = RTDM_NAMED_DEVICE; rtdm_dev->dev->context_size = sizeof(ec_rtdm_context_t); snprintf(rtdm_dev->dev->device_name, RTDM_MAX_DEVNAME_LEN, "EtherCAT%u", master->index); rtdm_dev->dev->open_nrt = ec_rtdm_open; rtdm_dev->dev->ops.close_nrt = ec_rtdm_close; rtdm_dev->dev->ops.ioctl_rt = ec_rtdm_ioctl; rtdm_dev->dev->ops.ioctl_nrt = ec_rtdm_ioctl; rtdm_dev->dev->device_class = RTDM_CLASS_EXPERIMENTAL; rtdm_dev->dev->device_sub_class = 222; rtdm_dev->dev->driver_name = "EtherCAT"; rtdm_dev->dev->driver_version = RTDM_DRIVER_VER(1, 0, 2); rtdm_dev->dev->peripheral_name = rtdm_dev->dev->device_name; rtdm_dev->dev->provider_name = "EtherLab Community"; rtdm_dev->dev->proc_name = rtdm_dev->dev->device_name; rtdm_dev->dev->device_data = rtdm_dev; /* pointer to parent */ EC_MASTER_INFO(master, "Registering RTDM device %s.\n", rtdm_dev->dev->driver_name); ret = rtdm_dev_register(rtdm_dev->dev); if (ret) { EC_MASTER_ERR(master, "Initialization of RTDM interface failed" " (return value %i).\n", ret); kfree(rtdm_dev->dev); } return ret; }
.ioctl_nrt = handleIOctl, .select_bind = NULL, .read_rt = handleRd, .read_nrt = NULL, .write_rt = handleWr, .write_nrt = NULL, .recvmsg_rt = NULL, .recvmsg_nrt = NULL, .sendmsg_rt = NULL, .sendmsg_nrt = NULL }, .device_class = RTDM_CLASS_SERIAL, .device_sub_class = 0, .profile_version = 0, .driver_name = DEF_DRV_NAME, .driver_version = RTDM_DRIVER_VER(DEF_DRV_VERSION_MAJOR, DEF_DRV_VERSION_MINOR, DEF_DRV_VERSION_PATCH), .peripheral_name = DEF_DRV_SUPP_DEVICE, .provider_name = DEF_DRV_AUTHOR, .proc_name = DEF_DRV_NAME, .device_id = 0, .device_data = NULL }; /*====================================================== GLOBAL VARIABLES ==*/ MODULE_LICENSE("GPL"); MODULE_AUTHOR(DEF_DRV_AUTHOR); MODULE_DESCRIPTION(DEF_DRV_DESCRIPTION); MODULE_SUPPORTED_DEVICE(DEF_DRV_SUPP_DEVICE); /*============================================ LOCAL FUNCTION DEFINITIONS ==*/
.device_name = DEVICE_NAME_1, .proc_name = DEVICE_NAME_1, .open_nrt = uart_open_nrt, .ops={ .close_nrt = uart_close_nrt, .read_rt = uart_rd_rt, .write_rt = uart_wr_rt, .ioctl_rt = uart_ioctl_rt, }, .device_class =RTDM_CLASS_SERIAL, .device_sub_class =2015, .profile_version =1, .driver_name =DRIVER_NAME, .driver_version =RTDM_DRIVER_VER(1,1,0), .peripheral_name ="RTDM UART MASTER", .provider_name ="JAY KOTHARI", }; static void omap_serial_fill_features_erratas(struct uart_omap_port *up) { u32 mvr, scheme; u16 revision, major, minor; printk(".................omap_serial_fill_feature_erratas\n"); mvr = serial_in(up, UART_OMAP_MVER);//* Module version register */ /* Check revision register scheme */ scheme = mvr >> OMAP_UART_MVR_SCHEME_SHIFT; switch (scheme) {
.context_size = sizeof(buffer_t), .device_name = DEVICE_NAME, .open_nrt = simple_rtdm_open_nrt, .ops = { .close_nrt = simple_rtdm_close_nrt, .read_nrt = simple_rtdm_read_nrt, .write_nrt = simple_rtdm_write_nrt, }, .device_class = RTDM_CLASS_EXPERIMENTAL, .device_sub_class = SOME_SUB_CLASS, .profile_version = 1, .driver_name = "SimpleRTDM", .driver_version = RTDM_DRIVER_VER(0, 1, 2), .peripheral_name = "Simple RTDM example", .provider_name = "trem", .proc_name = device.device_name, }; /** * This function is called when the module is loaded * * It simply registers the RTDM device. * */ int __init simple_rtdm_init(void) { return rtdm_dev_register(&device); }