Lines Matching refs:st

91 static int vmclock_get_crosststamp(struct vmclock_state *st,  in vmclock_get_crosststamp()  argument
110 seq = le32_to_cpu(st->clk->seq_count) & ~1ULL; in vmclock_get_crosststamp()
118 if (st->clk->clock_status == VMCLOCK_STATUS_UNRELIABLE) in vmclock_get_crosststamp()
137 if (systime_snapshot.cs_id == st->cs_id) { in vmclock_get_crosststamp()
147 delta = cycle - le64_to_cpu(st->clk->counter_value); in vmclock_get_crosststamp()
150 le64_to_cpu(st->clk->counter_period_frac_sec), in vmclock_get_crosststamp()
151 st->clk->counter_period_shift, in vmclock_get_crosststamp()
152 le64_to_cpu(st->clk->time_frac_sec)); in vmclock_get_crosststamp()
154 tspec->tv_sec += le64_to_cpu(st->clk->time_sec); in vmclock_get_crosststamp()
156 if (!tai_adjust(st->clk, &tspec->tv_sec)) in vmclock_get_crosststamp()
164 if (seq == le32_to_cpu(st->clk->seq_count)) in vmclock_get_crosststamp()
173 system_counter->cs_id = st->cs_id; in vmclock_get_crosststamp()
178 if (systime_snapshot.cs_id == st->cs_id) in vmclock_get_crosststamp()
191 static int vmclock_get_crosststamp_kvmclock(struct vmclock_state *st, in vmclock_get_crosststamp_kvmclock() argument
205 ret = vmclock_get_crosststamp(st, sts, system_counter, tspec); in vmclock_get_crosststamp_kvmclock()
234 struct vmclock_state *st = ctx; in ptp_vmclock_get_time_fn() local
239 if (READ_ONCE(st->sys_cs_id) == CSID_X86_KVM_CLK) in ptp_vmclock_get_time_fn()
240 ret = vmclock_get_crosststamp_kvmclock(st, NULL, system_counter, in ptp_vmclock_get_time_fn()
244 ret = vmclock_get_crosststamp(st, NULL, system_counter, &tspec); in ptp_vmclock_get_time_fn()
255 struct vmclock_state *st = container_of(ptp, struct vmclock_state, in ptp_vmclock_getcrosststamp() local
257 int ret = get_device_system_crosststamp(ptp_vmclock_get_time_fn, st, in ptp_vmclock_getcrosststamp()
272 WRITE_ONCE(st->sys_cs_id, systime_snapshot.cs_id); in ptp_vmclock_getcrosststamp()
274 st, NULL, xtstamp); in ptp_vmclock_getcrosststamp()
304 struct vmclock_state *st = container_of(ptp, struct vmclock_state, in ptp_vmclock_gettimex() local
307 return vmclock_get_crosststamp(st, sts, NULL, ts); in ptp_vmclock_gettimex()
331 struct vmclock_state *st) in vmclock_ptp_register() argument
336 st->clk->counter_id == VMCLOCK_COUNTER_ARM_VCNT) { in vmclock_ptp_register()
340 st->clk->counter_id == VMCLOCK_COUNTER_X86_TSC) { in vmclock_ptp_register()
347 if (!tai_adjust(st->clk, NULL)) { in vmclock_ptp_register()
352 st->sys_cs_id = cs_id; in vmclock_ptp_register()
353 st->cs_id = cs_id; in vmclock_ptp_register()
354 st->ptp_clock_info = ptp_vmclock_info; in vmclock_ptp_register()
355 strscpy(st->ptp_clock_info.name, st->name); in vmclock_ptp_register()
357 return ptp_clock_register(&st->ptp_clock_info, dev); in vmclock_ptp_register()
362 struct vmclock_state *st = container_of(fp->private_data, in vmclock_miscdev_mmap() local
372 st->res.start >> PAGE_SHIFT, PAGE_SIZE, in vmclock_miscdev_mmap()
382 struct vmclock_state *st = container_of(fp->private_data, in vmclock_miscdev_read() local
396 seq = le32_to_cpu(st->clk->seq_count) & ~1U; in vmclock_miscdev_read()
400 if (copy_to_user(buf, ((char *)st->clk) + *ppos, count)) in vmclock_miscdev_read()
405 if (seq == le32_to_cpu(st->clk->seq_count)) in vmclock_miscdev_read()
426 struct vmclock_state *st = data; in vmclock_remove() local
428 if (st->ptp_clock) in vmclock_remove()
429 ptp_clock_unregister(st->ptp_clock); in vmclock_remove()
431 if (st->miscdev.minor != MISC_DYNAMIC_MINOR) in vmclock_remove()
432 misc_deregister(&st->miscdev); in vmclock_remove()
437 struct vmclock_state *st = data; in vmclock_acpi_resources() local
445 if (resource_type(&st->res) == IORESOURCE_MEM) in vmclock_acpi_resources()
452 resource_size(res) < sizeof(st->clk)) in vmclock_acpi_resources()
455 st->res = *res; in vmclock_acpi_resources()
462 static int vmclock_probe_acpi(struct device *dev, struct vmclock_state *st) in vmclock_probe_acpi() argument
476 vmclock_acpi_resources, st); in vmclock_probe_acpi()
477 if (ACPI_FAILURE(status) || resource_type(&st->res) != IORESOURCE_MEM) { in vmclock_probe_acpi()
487 struct vmclock_state *st = data; in vmclock_put_idx() local
489 ida_free(&vmclock_ida, st->index); in vmclock_put_idx()
495 struct vmclock_state *st; in vmclock_probe() local
498 st = devm_kzalloc(dev, sizeof(*st), GFP_KERNEL); in vmclock_probe()
499 if (!st) in vmclock_probe()
503 ret = vmclock_probe_acpi(dev, st); in vmclock_probe()
512 if (resource_size(&st->res) < VMCLOCK_MIN_SIZE) { in vmclock_probe()
514 resource_size(&st->res)); in vmclock_probe()
517 st->clk = devm_memremap(dev, st->res.start, resource_size(&st->res), in vmclock_probe()
519 if (IS_ERR(st->clk)) { in vmclock_probe()
520 ret = PTR_ERR(st->clk); in vmclock_probe()
522 st->clk = NULL; in vmclock_probe()
526 if (le32_to_cpu(st->clk->magic) != VMCLOCK_MAGIC || in vmclock_probe()
527 le32_to_cpu(st->clk->size) > resource_size(&st->res) || in vmclock_probe()
528 le16_to_cpu(st->clk->version) != 1) { in vmclock_probe()
537 st->index = ret; in vmclock_probe()
538 ret = devm_add_action_or_reset(&pdev->dev, vmclock_put_idx, st); in vmclock_probe()
542 st->name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "vmclock%d", st->index); in vmclock_probe()
543 if (!st->name) in vmclock_probe()
546 st->miscdev.minor = MISC_DYNAMIC_MINOR; in vmclock_probe()
548 ret = devm_add_action_or_reset(&pdev->dev, vmclock_remove, st); in vmclock_probe()
558 if (le32_to_cpu(st->clk->size) >= PAGE_SIZE) { in vmclock_probe()
559 st->miscdev.fops = &vmclock_miscdev_fops; in vmclock_probe()
560 st->miscdev.name = st->name; in vmclock_probe()
562 ret = misc_register(&st->miscdev); in vmclock_probe()
568 if (VMCLOCK_FIELD_PRESENT(st->clk, time_frac_sec)) { in vmclock_probe()
570 st->ptp_clock = vmclock_ptp_register(dev, st); in vmclock_probe()
571 if (IS_ERR(st->ptp_clock)) { in vmclock_probe()
572 ret = PTR_ERR(st->ptp_clock); in vmclock_probe()
573 st->ptp_clock = NULL; in vmclock_probe()
578 if (!st->miscdev.minor && !st->ptp_clock) { in vmclock_probe()
584 dev_info(dev, "%s: registered %s%s%s\n", st->name, in vmclock_probe()
585 st->miscdev.minor ? "miscdev" : "", in vmclock_probe()
586 (st->miscdev.minor && st->ptp_clock) ? ", " : "", in vmclock_probe()
587 st->ptp_clock ? "PTP" : ""); in vmclock_probe()