Lines Matching refs:viortc

80 	struct viortc_dev *viortc;  member
100 struct viortc_dev *viortc; in viortc_class_from_dev() local
103 viortc = vdev->priv; in viortc_class_from_dev()
105 return viortc->viortc_class ?: ERR_PTR(-ENODEV); in viortc_class_from_dev()
134 static int viortc_feed_vq(struct viortc_dev *viortc, struct virtqueue *vq, in viortc_feed_vq() argument
158 static struct viortc_msg *viortc_msg_init(struct viortc_dev *viortc, in viortc_msg_init() argument
162 struct device *dev = &viortc->vdev->dev; in viortc_msg_init()
182 msg->viortc = viortc; in viortc_msg_init()
212 dev = &msg->viortc->vdev->dev; in viortc_msg_release()
231 struct viortc_dev *viortc)) in viortc_do_cb() argument
233 struct viortc_dev *viortc = vq->vdev->priv; in viortc_do_cb() local
240 viortc_vq = &viortc->vqs[vq->index]; in viortc_do_cb()
262 handle_buf(token, len, vq, viortc_vq, viortc); in viortc_do_cb()
281 struct viortc_dev *viortc) in viortc_requestq_hdlr() argument
318 struct viortc_dev *viortc) in viortc_alarmq_hdlr() argument
327 dev_err_ratelimited(&viortc->vdev->dev, in viortc_alarmq_hdlr()
334 dev_err_ratelimited(&viortc->vdev->dev, in viortc_alarmq_hdlr()
341 dev_err_ratelimited(&viortc->vdev->dev, in viortc_alarmq_hdlr()
349 if (!viortc->viortc_class) in viortc_alarmq_hdlr()
350 dev_warn_ratelimited(&viortc->vdev->dev, in viortc_alarmq_hdlr()
353 viortc_class_alarm(viortc->viortc_class, clock_id); in viortc_alarmq_hdlr()
358 if (viortc_feed_vq(viortc, vq, notif, VIORTC_ALARMQ_BUF_CAP, token)) in viortc_alarmq_hdlr()
359 dev_warn(&viortc->vdev->dev, in viortc_alarmq_hdlr()
520 #define VIORTC_MSG_INIT(hdl, viortc) \ argument
524 _hdl->msg = viortc_msg_init((viortc), _hdl->msg_type, \
589 int viortc_read(struct viortc_dev *viortc, u16 vio_clk_id, u64 *reading) in viortc_read() argument
596 ret = VIORTC_MSG_INIT(hdl, viortc); in viortc_read()
602 ret = viortc_msg_xfer(&viortc->vqs[VIORTC_REQUESTQ], VIORTC_MSG(hdl), in viortc_read()
605 dev_dbg(&viortc->vdev->dev, "%s: xfer returned %d\n", __func__, in viortc_read()
629 int viortc_read_cross(struct viortc_dev *viortc, u16 vio_clk_id, u8 hw_counter, in viortc_read_cross() argument
637 ret = VIORTC_MSG_INIT(hdl, viortc); in viortc_read_cross()
644 ret = viortc_msg_xfer(&viortc->vqs[VIORTC_REQUESTQ], VIORTC_MSG(hdl), in viortc_read_cross()
647 dev_dbg(&viortc->vdev->dev, "%s: xfer returned %d\n", __func__, in viortc_read_cross()
673 static int viortc_cfg(struct viortc_dev *viortc, u16 *num_clocks) in viortc_cfg() argument
680 ret = VIORTC_MSG_INIT(hdl, viortc); in viortc_cfg()
684 ret = viortc_msg_xfer(&viortc->vqs[VIORTC_REQUESTQ], VIORTC_MSG(hdl), in viortc_cfg()
687 dev_dbg(&viortc->vdev->dev, "%s: xfer returned %d\n", __func__, in viortc_cfg()
711 static int viortc_clock_cap(struct viortc_dev *viortc, u16 vio_clk_id, u8 *type, in viortc_clock_cap() argument
719 ret = VIORTC_MSG_INIT(hdl, viortc); in viortc_clock_cap()
725 ret = viortc_msg_xfer(&viortc->vqs[VIORTC_REQUESTQ], VIORTC_MSG(hdl), in viortc_clock_cap()
728 dev_dbg(&viortc->vdev->dev, "%s: xfer returned %d\n", __func__, in viortc_clock_cap()
753 int viortc_cross_cap(struct viortc_dev *viortc, u16 vio_clk_id, u8 hw_counter, in viortc_cross_cap() argument
762 ret = VIORTC_MSG_INIT(hdl, viortc); in viortc_cross_cap()
769 ret = viortc_msg_xfer(&viortc->vqs[VIORTC_REQUESTQ], VIORTC_MSG(hdl), in viortc_cross_cap()
772 dev_dbg(&viortc->vdev->dev, "%s: xfer returned %d\n", __func__, in viortc_cross_cap()
796 int viortc_read_alarm(struct viortc_dev *viortc, u16 vio_clk_id, in viortc_read_alarm() argument
805 ret = VIORTC_MSG_INIT(hdl, viortc); in viortc_read_alarm()
811 ret = viortc_msg_xfer(&viortc->vqs[VIORTC_REQUESTQ], VIORTC_MSG(hdl), in viortc_read_alarm()
814 dev_dbg(&viortc->vdev->dev, "%s: xfer returned %d\n", __func__, in viortc_read_alarm()
840 int viortc_set_alarm(struct viortc_dev *viortc, u16 vio_clk_id, u64 alarm_time, in viortc_set_alarm() argument
849 ret = VIORTC_MSG_INIT(hdl, viortc); in viortc_set_alarm()
860 ret = viortc_msg_xfer(&viortc->vqs[VIORTC_REQUESTQ], VIORTC_MSG(hdl), in viortc_set_alarm()
863 dev_dbg(&viortc->vdev->dev, "%s: xfer returned %d\n", __func__, in viortc_set_alarm()
883 int viortc_set_alarm_enabled(struct viortc_dev *viortc, u16 vio_clk_id, in viortc_set_alarm_enabled() argument
892 ret = VIORTC_MSG_INIT(hdl, viortc); in viortc_set_alarm_enabled()
902 ret = viortc_msg_xfer(&viortc->vqs[VIORTC_REQUESTQ], VIORTC_MSG(hdl), in viortc_set_alarm_enabled()
905 dev_dbg(&viortc->vdev->dev, "%s: xfer returned %d\n", __func__, in viortc_set_alarm_enabled()
933 static int viortc_init_rtc_class_clock(struct viortc_dev *viortc, in viortc_init_rtc_class_clock() argument
936 struct virtio_device *vdev = viortc->vdev; in viortc_init_rtc_class_clock()
948 if (viortc->viortc_class) { in viortc_init_rtc_class_clock()
957 viortc_class = viortc_class_init(viortc, vio_clk_id, have_alarm, dev); in viortc_init_rtc_class_clock()
961 viortc->viortc_class = viortc_class; in viortc_init_rtc_class_clock()
980 static int viortc_init_ptp_clock(struct viortc_dev *viortc, u16 vio_clk_id, in viortc_init_ptp_clock() argument
983 struct device *dev = &viortc->vdev->dev; in viortc_init_ptp_clock()
991 vio_ptp = viortc_ptp_register(viortc, dev, vio_clk_id, ptp_clock_name); in viortc_init_ptp_clock()
998 viortc->clocks_to_unregister[vio_clk_id] = vio_ptp; in viortc_init_ptp_clock()
1013 static int viortc_init_clock(struct viortc_dev *viortc, u16 vio_clk_id) in viortc_init_clock() argument
1019 ret = viortc_clock_cap(viortc, vio_clk_id, &clock_type, in viortc_init_clock()
1028 ret = viortc_init_rtc_class_clock(viortc, vio_clk_id, in viortc_init_clock()
1037 ret = viortc_init_ptp_clock(viortc, vio_clk_id, clock_type, in viortc_init_clock()
1046 dev_warn(&viortc->vdev->dev, in viortc_init_clock()
1057 static void viortc_clocks_deinit(struct viortc_dev *viortc) in viortc_clocks_deinit() argument
1062 for (i = 0; i < viortc->num_clocks; i++) { in viortc_clocks_deinit()
1063 vio_ptp = viortc->clocks_to_unregister[i]; in viortc_clocks_deinit()
1068 viortc->clocks_to_unregister[i] = NULL; in viortc_clocks_deinit()
1070 WARN_ON(viortc_ptp_unregister(vio_ptp, &viortc->vdev->dev)); in viortc_clocks_deinit()
1073 if (viortc->viortc_class) in viortc_clocks_deinit()
1074 viortc_class_stop(viortc->viortc_class); in viortc_clocks_deinit()
1084 static int viortc_clocks_init(struct viortc_dev *viortc) in viortc_clocks_init() argument
1090 ret = viortc_cfg(viortc, &num_clocks); in viortc_clocks_init()
1095 dev_err(&viortc->vdev->dev, "device reported 0 clocks\n"); in viortc_clocks_init()
1099 viortc->num_clocks = num_clocks; in viortc_clocks_init()
1101 viortc->clocks_to_unregister = in viortc_clocks_init()
1102 devm_kcalloc(&viortc->vdev->dev, num_clocks, in viortc_clocks_init()
1103 sizeof(*viortc->clocks_to_unregister), GFP_KERNEL); in viortc_clocks_init()
1104 if (!viortc->clocks_to_unregister) in viortc_clocks_init()
1108 ret = viortc_init_clock(viortc, i); in viortc_clocks_init()
1116 viortc_clocks_deinit(viortc); in viortc_clocks_init()
1135 static int viortc_populate_vq(struct viortc_dev *viortc, in viortc_populate_vq() argument
1145 num_elems = viortc->num_alarmq_bufs; in viortc_populate_vq()
1149 buf = viortc->alarmq_bufs[i]; in viortc_populate_vq()
1154 ret = viortc_feed_vq(viortc, vq, buf, buf_cap, buf); in viortc_populate_vq()
1158 ret = viortc_feed_vq(viortc, vq, buf, buf_cap, buf); in viortc_populate_vq()
1177 static int viortc_alloc_vq_bufs(struct viortc_dev *viortc, in viortc_alloc_vq_bufs() argument
1180 struct device *dev = &viortc->vdev->dev; in viortc_alloc_vq_bufs()
1189 viortc->alarmq_bufs = buf_list; in viortc_alloc_vq_bufs()
1190 viortc->num_alarmq_bufs = num_elems; in viortc_alloc_vq_bufs()
1212 static int viortc_init_vqs(struct viortc_dev *viortc) in viortc_init_vqs() argument
1219 struct virtio_device *vdev = viortc->vdev; in viortc_init_vqs()
1235 viortc->vqs[VIORTC_REQUESTQ].vq = vqs[VIORTC_REQUESTQ]; in viortc_init_vqs()
1236 spin_lock_init(&viortc->vqs[VIORTC_REQUESTQ].lock); in viortc_init_vqs()
1239 viortc->vqs[VIORTC_ALARMQ].vq = vqs[VIORTC_ALARMQ]; in viortc_init_vqs()
1240 spin_lock_init(&viortc->vqs[VIORTC_ALARMQ].lock); in viortc_init_vqs()
1246 if (!viortc->alarmq_bufs) { in viortc_init_vqs()
1247 ret = viortc_alloc_vq_bufs(viortc, num_elems, in viortc_init_vqs()
1252 viortc->num_alarmq_bufs = in viortc_init_vqs()
1253 min(num_elems, viortc->num_alarmq_bufs); in viortc_init_vqs()
1271 struct viortc_dev *viortc; in viortc_probe() local
1276 viortc = devm_kzalloc(&vdev->dev, sizeof(*viortc), GFP_KERNEL); in viortc_probe()
1277 if (!viortc) in viortc_probe()
1280 vdev->priv = viortc; in viortc_probe()
1281 viortc->vdev = vdev; in viortc_probe()
1283 ret = viortc_init_vqs(viortc); in viortc_probe()
1289 ret = viortc_clocks_init(viortc); in viortc_probe()
1294 alarm_viortc_vq = &viortc->vqs[VIORTC_ALARMQ]; in viortc_probe()
1297 ret = viortc_populate_vq(viortc, alarm_viortc_vq, in viortc_probe()
1315 viortc_clocks_deinit(viortc); in viortc_probe()
1330 struct viortc_dev *viortc = vdev->priv; in viortc_remove() local
1332 viortc_clocks_deinit(viortc); in viortc_remove()
1350 struct viortc_dev *viortc = dev->priv; in viortc_restore() local
1356 ret = viortc_init_vqs(viortc); in viortc_restore()
1360 alarm_viortc_vq = &viortc->vqs[VIORTC_ALARMQ]; in viortc_restore()
1364 ret = viortc_populate_vq(viortc, alarm_viortc_vq, in viortc_restore()