Lines Matching +full:resume +full:- +full:offset
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright � 2010 - 2015 UNISYS CORPORATION
38 guid = visorchannel_get_guid(vdev->visorchannel); in modalias_show()
73 if (!guid_equal(&ch->chtype, expected_guid)) { in visor_check_channel()
76 &ch->chtype); in visor_check_channel()
82 if (ch->size < expected_min_bytes) { in visor_check_channel()
83 …dev_err(dev, "Channel mismatch on channel=%s(%pUL) field=size expected=0x%-8.8Lx actual=0x%-8.8Lx\… in visor_check_channel()
86 ch->size); in visor_check_channel()
92 if (ch->version_id != expected_version) { in visor_check_channel()
93 …dev_err(dev, "Channel mismatch on channel=%s(%pUL) field=version expected=0x%-8.8lx actual=0x%-8.8… in visor_check_channel()
96 ch->version_id); in visor_check_channel()
102 if (ch->signature != expected_signature) { in visor_check_channel()
103 …(dev, "Channel mismatch on channel=%s(%pUL) field=signature expected=0x%-8.8Lx actual=0x%-8.8Lx\n", in visor_check_channel()
105 ch->signature); in visor_check_channel()
118 guid = visorchannel_get_guid(dev->visorchannel); in visorbus_uevent()
123 * visorbus_match() - called automatically upon adding a visor_device
140 channel_type = visorchannel_get_guid(dev->visorchannel); in visorbus_match()
142 chan = dev->visorchannel; in visorbus_match()
143 if (!drv->channel_types) in visorbus_match()
145 for (i = 0; !guid_is_null(&drv->channel_types[i].guid); i++) in visorbus_match()
146 if (guid_equal(&drv->channel_types[i].guid, channel_type) && in visorbus_match()
149 &drv->channel_types[i].guid, in visorbus_match()
150 (char *)drv->channel_types[i].name, in visorbus_match()
151 drv->channel_types[i].min_bytes, in visorbus_match()
152 drv->channel_types[i].version, in visorbus_match()
179 if (vdev->chipset_bus_no == id->bus_no && in match_visorbus_dev_by_id()
180 vdev->chipset_dev_no == id->dev_no) in match_visorbus_dev_by_id()
196 dev_start = &from->device; in visorbus_get_device_by_id()
205 * visorbus_release_busdevice() - called when device_unregister() is called for
214 debugfs_remove(dev->debugfs_bus_info); in visorbus_release_busdevice()
215 debugfs_remove_recursive(dev->debugfs_dir); in visorbus_release_busdevice()
216 visorchannel_destroy(dev->visorchannel); in visorbus_release_busdevice()
221 * visorbus_release_device() - called when device_unregister() is called for
229 visorchannel_destroy(dev->visorchannel); in visorbus_release_device()
244 visorchannel_get_physaddr(vdev->visorchannel)); in physaddr_show()
254 visorchannel_get_nbytes(vdev->visorchannel)); in nbytes_show()
264 visorchannel_get_clientpartition(vdev->visorchannel)); in clientpartition_show()
275 visorchannel_id(vdev->visorchannel, typeid)); in typeguid_show()
286 visorchannel_zoneid(vdev->visorchannel, zoneid)); in zoneguid_show()
294 struct bus_type *xbus = dev->bus; in typename_show()
295 struct device_driver *xdrv = dev->driver; in typename_show()
300 i = xbus->match(dev, xdrv); in typename_show()
304 return sprintf(buf, "%s\n", drv->channel_types[i - 1].name); in typename_show()
330 u64 handle = visorchannel_get_clientpartition(vdev->visorchannel); in partition_handle_show()
341 return sprintf(buf, "{%pUb}\n", &vdev->partition_guid); in partition_guid_show()
350 return sprintf(buf, "%s\n", vdev->name); in partition_name_show()
358 u64 addr = visorchannel_get_physaddr(vdev->visorchannel); in channel_addr_show()
368 u64 nbytes = visorchannel_get_nbytes(vdev->visorchannel); in channel_bytes_show()
380 visorchannel_id(vdev->visorchannel, buf); in channel_id_show()
407 * vbuschannel_print_devinfo() - format a struct visor_vbus_deviceinfo
411 * @devix: the device index to be included in the output data, or -1 if no
414 * Reads @devInfo, and writes it in human-readable notation to @seq.
420 if (!isprint(devinfo->devtype[0])) in vbuschannel_print_devinfo()
428 * Note: because the s-Par back-end is free to scribble in this area, in vbuschannel_print_devinfo()
429 * we never assume '\0'-termination. in vbuschannel_print_devinfo()
431 seq_printf(seq, "%-*.*s ", (int)sizeof(devinfo->devtype), in vbuschannel_print_devinfo()
432 (int)sizeof(devinfo->devtype), devinfo->devtype); in vbuschannel_print_devinfo()
433 seq_printf(seq, "%-*.*s ", (int)sizeof(devinfo->drvname), in vbuschannel_print_devinfo()
434 (int)sizeof(devinfo->drvname), devinfo->drvname); in vbuschannel_print_devinfo()
435 seq_printf(seq, "%.*s\n", (int)sizeof(devinfo->infostrs), in vbuschannel_print_devinfo()
436 devinfo->infostrs); in vbuschannel_print_devinfo()
444 struct visor_device *vdev = seq->private; in bus_info_debugfs_show()
445 struct visorchannel *channel = vdev->visorchannel; in bus_info_debugfs_show()
452 ((vdev->name) ? (char *)(vdev->name) : ""), in bus_info_debugfs_show()
453 vdev->chipset_bus_no); in bus_info_debugfs_show()
457 vbuschannel_print_devinfo(&dev_info, seq, -1); in bus_info_debugfs_show()
461 vbuschannel_print_devinfo(&dev_info, seq, -1); in bus_info_debugfs_show()
476 return single_open(file, bus_info_debugfs_show, inode->i_private); in bus_info_debugfs_open()
490 struct visor_driver *drv = to_visor_driver(dev->device.driver); in dev_periodic_work()
492 drv->channel_interrupt(dev); in dev_periodic_work()
493 mod_timer(&dev->timer, jiffies + POLLJIFFIES_NORMALCHANNEL); in dev_periodic_work()
498 if (dev->being_removed || dev->timer_active) in dev_start_periodic_work()
499 return -EINVAL; in dev_start_periodic_work()
502 get_device(&dev->device); in dev_start_periodic_work()
503 dev->timer.expires = jiffies + POLLJIFFIES_NORMALCHANNEL; in dev_start_periodic_work()
504 add_timer(&dev->timer); in dev_start_periodic_work()
505 dev->timer_active = true; in dev_start_periodic_work()
511 if (!dev->timer_active) in dev_stop_periodic_work()
514 del_timer_sync(&dev->timer); in dev_stop_periodic_work()
515 dev->timer_active = false; in dev_stop_periodic_work()
516 put_device(&dev->device); in dev_stop_periodic_work()
520 * visordriver_remove_device() - handle visor device going away
532 struct visor_driver *drv = to_visor_driver(xdev->driver); in visordriver_remove_device()
534 mutex_lock(&dev->visordriver_callback_lock); in visordriver_remove_device()
535 dev->being_removed = true; in visordriver_remove_device()
536 drv->remove(dev); in visordriver_remove_device()
537 mutex_unlock(&dev->visordriver_callback_lock); in visordriver_remove_device()
539 put_device(&dev->device); in visordriver_remove_device()
544 * visorbus_unregister_visor_driver() - unregisters the provided driver
552 driver_unregister(&drv->driver); in visorbus_unregister_visor_driver()
557 * visorbus_read_channel() - reads from the designated channel into
560 * @offset: the offset into the channel at which reading starts
566 * Return: integer indicating success (zero) or failure (non-zero)
568 int visorbus_read_channel(struct visor_device *dev, unsigned long offset, in visorbus_read_channel() argument
571 return visorchannel_read(dev->visorchannel, offset, dest, nbytes); in visorbus_read_channel()
576 * visorbus_write_channel() - writes the provided buffer into the designated
579 * @offset: the offset into the channel at which writing starts
585 * Return: integer indicating success (zero) or failure (non-zero)
587 int visorbus_write_channel(struct visor_device *dev, unsigned long offset, in visorbus_write_channel() argument
590 return visorchannel_write(dev->visorchannel, offset, src, nbytes); in visorbus_write_channel()
595 * visorbus_enable_channel_interrupts() - enables interrupts on the
604 struct visor_driver *drv = to_visor_driver(dev->device.driver); in visorbus_enable_channel_interrupts()
606 if (!drv->channel_interrupt) { in visorbus_enable_channel_interrupts()
607 dev_err(&dev->device, "%s no interrupt function!\n", __func__); in visorbus_enable_channel_interrupts()
608 return -ENOENT; in visorbus_enable_channel_interrupts()
616 * visorbus_disable_channel_interrupts() - disables interrupts on the
627 * create_visor_device() - create visor device as a result of receiving the
629 * @dev: a freshly-zeroed struct visor_device, containing only filled-in values
651 u32 chipset_bus_no = dev->chipset_bus_no; in create_visor_device()
652 u32 chipset_dev_no = dev->chipset_dev_no; in create_visor_device()
654 mutex_init(&dev->visordriver_callback_lock); in create_visor_device()
655 dev->device.bus = &visorbus_type; in create_visor_device()
656 dev->device.groups = channel_groups; in create_visor_device()
657 device_initialize(&dev->device); in create_visor_device()
658 dev->device.release = visorbus_release_device; in create_visor_device()
660 get_device(&dev->device); in create_visor_device()
661 timer_setup(&dev->timer, dev_periodic_work, 0); in create_visor_device()
667 err = dev_set_name(&dev->device, "vbus%u:dev%u", in create_visor_device()
674 * ->device_attach(dev) in create_visor_device()
675 * ->for each driver drv registered on the bus that dev is on in create_visor_device()
688 err = device_add(&dev->device); in create_visor_device()
691 list_add_tail(&dev->list_all, &list_all_device_instances); in create_visor_device()
692 dev->state.created = 1; in create_visor_device()
698 put_device(&dev->device); in create_visor_device()
699 dev_err(&dev->device, "Creating visor device failed. %d\n", err); in create_visor_device()
705 list_del(&dev->list_all); in remove_visor_device()
706 put_device(&dev->device); in remove_visor_device()
707 if (dev->pending_msg_hdr) in remove_visor_device()
709 device_unregister(&dev->device); in remove_visor_device()
725 return -EINVAL; in get_vbus_header_info()
731 if (hdr_info->struct_bytes < sizeof(struct visor_vbus_headerinfo)) in get_vbus_header_info()
732 return -EINVAL; in get_vbus_header_info()
733 if (hdr_info->device_info_struct_bytes < in get_vbus_header_info()
735 return -EINVAL; in get_vbus_header_info()
740 * write_vbus_chp_info() - write the contents of <info> to the struct
742 * @chan: indentifies the s-Par channel that will be updated
743 * @hdr_info: used to find appropriate channel offset to write data
758 if (hdr_info->chp_info_offset == 0) in write_vbus_chp_info()
761 off = sizeof(struct channel_header) + hdr_info->chp_info_offset; in write_vbus_chp_info()
766 * write_vbus_bus_info() - write the contents of <info> to the struct
768 * @chan: indentifies the s-Par channel that will be updated
769 * @hdr_info: used to find appropriate channel offset to write data
784 if (hdr_info->bus_info_offset == 0) in write_vbus_bus_info()
787 off = sizeof(struct channel_header) + hdr_info->bus_info_offset; in write_vbus_bus_info()
792 * write_vbus_dev_info() - write the contents of <info> to the struct
794 * @chan: indentifies the s-Par channel that will be updated
795 * @hdr_info: used to find appropriate channel offset to write data
797 * @devix: the relative device number (0..n-1) of the device on the bus
812 if (hdr_info->dev_info_offset == 0) in write_vbus_dev_info()
814 off = (sizeof(struct channel_header) + hdr_info->dev_info_offset) + in write_vbus_dev_info()
815 (hdr_info->device_info_struct_bytes * devix); in write_vbus_dev_info()
824 snprintf(bus_device_info_ptr->devtype, in bus_device_info_init()
825 sizeof(bus_device_info_ptr->devtype), in bus_device_info_init()
827 snprintf(bus_device_info_ptr->drvname, in bus_device_info_init()
828 sizeof(bus_device_info_ptr->drvname), in bus_device_info_init()
830 snprintf(bus_device_info_ptr->infostrs, in bus_device_info_init()
831 sizeof(bus_device_info_ptr->infostrs), "kernel ver. %s", in bus_device_info_init()
832 utsname()->release); in bus_device_info_init()
836 * publish_vbus_dev_info() - for a child device just created on a client bus,
847 u32 bus_no = visordev->chipset_bus_no; in publish_vbus_dev_info()
848 u32 dev_no = visordev->chipset_dev_no; in publish_vbus_dev_info()
853 if (!visordev->device.driver) in publish_vbus_dev_info()
858 hdr_info = (struct visor_vbus_headerinfo *)bdev->vbus_hdr_info; in publish_vbus_dev_info()
861 visordrv = to_visor_driver(visordev->device.driver); in publish_vbus_dev_info()
869 for (i = 0; visordrv->channel_types[i].name; i++) { in publish_vbus_dev_info()
870 if (guid_equal(&visordrv->channel_types[i].guid, in publish_vbus_dev_info()
871 &visordev->channel_type_guid)) { in publish_vbus_dev_info()
872 chan_type_name = visordrv->channel_types[i].name; in publish_vbus_dev_info()
876 bus_device_info_init(&dev_info, chan_type_name, visordrv->name); in publish_vbus_dev_info()
877 write_vbus_dev_info(bdev->visorchannel, hdr_info, &dev_info, dev_no); in publish_vbus_dev_info()
878 write_vbus_chp_info(bdev->visorchannel, hdr_info, &chipset_driverinfo); in publish_vbus_dev_info()
879 write_vbus_bus_info(bdev->visorchannel, hdr_info, in publish_vbus_dev_info()
884 * visordriver_probe_device() - handle new visor device coming online
901 struct visor_driver *drv = to_visor_driver(xdev->driver); in visordriver_probe_device()
904 mutex_lock(&dev->visordriver_callback_lock); in visordriver_probe_device()
905 dev->being_removed = false; in visordriver_probe_device()
906 err = drv->probe(dev); in visordriver_probe_device()
908 mutex_unlock(&dev->visordriver_callback_lock); in visordriver_probe_device()
912 get_device(&dev->device); in visordriver_probe_device()
914 mutex_unlock(&dev->visordriver_callback_lock); in visordriver_probe_device()
919 * visorbus_register_visor_driver() - registers the provided visor driver for
930 * At system start-up, the visorbus kernel module is loaded, which registers
960 * returns the newly-created struct to pci_scan_single_device(), who adds it
964 * Return: integer indicating success (zero) or failure (non-zero)
970 return -ENODEV; in visorbus_register_visor_driver()
971 if (!drv->probe) in visorbus_register_visor_driver()
972 return -EINVAL; in visorbus_register_visor_driver()
973 if (!drv->remove) in visorbus_register_visor_driver()
974 return -EINVAL; in visorbus_register_visor_driver()
975 if (!drv->pause) in visorbus_register_visor_driver()
976 return -EINVAL; in visorbus_register_visor_driver()
977 if (!drv->resume) in visorbus_register_visor_driver()
978 return -EINVAL; in visorbus_register_visor_driver()
980 drv->driver.name = drv->name; in visorbus_register_visor_driver()
981 drv->driver.bus = &visorbus_type; in visorbus_register_visor_driver()
982 drv->driver.probe = visordriver_probe_device; in visorbus_register_visor_driver()
983 drv->driver.remove = visordriver_remove_device; in visorbus_register_visor_driver()
984 drv->driver.owner = drv->owner; in visorbus_register_visor_driver()
988 * ->if (drv.bus) ** (bus_type) ** in visorbus_register_visor_driver()
997 return driver_register(&drv->driver); in visorbus_register_visor_driver()
1002 * visorbus_create_instance() - create a device instance for the visorbus itself
1010 int id = dev->chipset_bus_no; in visorbus_create_instance()
1016 return -ENOMEM; in visorbus_create_instance()
1017 dev_set_name(&dev->device, "visorbus%d", id); in visorbus_create_instance()
1018 dev->device.bus = &visorbus_type; in visorbus_create_instance()
1019 dev->device.groups = visorbus_groups; in visorbus_create_instance()
1020 dev->device.release = visorbus_release_busdevice; in visorbus_create_instance()
1021 dev->debugfs_dir = debugfs_create_dir(dev_name(&dev->device), in visorbus_create_instance()
1023 dev->debugfs_bus_info = debugfs_create_file("client_bus_info", 0440, in visorbus_create_instance()
1024 dev->debugfs_dir, dev, in visorbus_create_instance()
1026 dev_set_drvdata(&dev->device, dev); in visorbus_create_instance()
1027 err = get_vbus_header_info(dev->visorchannel, &dev->device, hdr_info); in visorbus_create_instance()
1030 err = device_register(&dev->device); in visorbus_create_instance()
1033 list_add_tail(&dev->list_all, &list_all_bus_instances); in visorbus_create_instance()
1034 dev->state.created = 1; in visorbus_create_instance()
1035 dev->vbus_hdr_info = (void *)hdr_info; in visorbus_create_instance()
1036 write_vbus_chp_info(dev->visorchannel, hdr_info, &chipset_driverinfo); in visorbus_create_instance()
1037 write_vbus_bus_info(dev->visorchannel, hdr_info, &clientbus_driverinfo); in visorbus_create_instance()
1042 debugfs_remove_recursive(dev->debugfs_dir); in visorbus_create_instance()
1044 dev_err(&dev->device, "%s failed: %d\n", __func__, err); in visorbus_create_instance()
1049 * visorbus_remove_instance() - remove a device instance for the visorbus itself
1056 * dev->dev being called, which will call in visorbus_remove_instance()
1062 kfree(dev->vbus_hdr_info); in visorbus_remove_instance()
1063 list_del(&dev->list_all); in visorbus_remove_instance()
1064 if (dev->pending_msg_hdr) in visorbus_remove_instance()
1066 device_unregister(&dev->device); in visorbus_remove_instance()
1070 * remove_all_visor_devices() - remove all child visorbus device instances
1085 * pause_state_change_complete() - the callback function to be called by a
1095 if (!dev->pausing) in pause_state_change_complete()
1098 dev->pausing = false; in pause_state_change_complete()
1104 * resume_state_change_complete() - the callback function to be called by a
1106 * pending "resume device" operation has
1109 * @status: 0 iff the resume state change completed successfully, otherwise
1114 if (!dev->resuming) in resume_state_change_complete()
1117 dev->resuming = false; in resume_state_change_complete()
1119 * Notify the chipset driver that the resume is complete, in resume_state_change_complete()
1128 * visorchipset_initiate_device_pause_resume() - start a pause or resume
1131 * @is_pause: true to indicate pause operation, false to indicate resume
1134 * or resume that device. Success/failure result is returned asynchronously
1144 /* If no driver associated with the device nothing to pause/resume */ in visorchipset_initiate_device_pause_resume()
1145 if (!dev->device.driver) in visorchipset_initiate_device_pause_resume()
1147 if (dev->pausing || dev->resuming) in visorchipset_initiate_device_pause_resume()
1148 return -EBUSY; in visorchipset_initiate_device_pause_resume()
1150 drv = to_visor_driver(dev->device.driver); in visorchipset_initiate_device_pause_resume()
1152 dev->pausing = true; in visorchipset_initiate_device_pause_resume()
1153 err = drv->pause(dev, pause_state_change_complete); in visorchipset_initiate_device_pause_resume()
1160 dev->resuming = true; in visorchipset_initiate_device_pause_resume()
1161 err = drv->resume(dev, resume_state_change_complete); in visorchipset_initiate_device_pause_resume()
1167 * visorchipset_device_pause() - start a pause operation for a visor device
1180 dev_info->pausing = false; in visorchipset_device_pause()
1187 * visorchipset_device_resume() - start a resume operation for a visor device
1190 * Tell the subordinate function driver for a specific device to resume
1200 dev_info->resuming = false; in visorchipset_device_resume()