Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * Greybus SVC code
  4 *
  5 * Copyright 2015 Google Inc.
  6 * Copyright 2015 Linaro Ltd.
  7 */
  8
  9#ifndef __SVC_H
 10#define __SVC_H
 11
 12#define GB_SVC_CPORT_FLAG_E2EFC		BIT(0)
 13#define GB_SVC_CPORT_FLAG_CSD_N		BIT(1)
 14#define GB_SVC_CPORT_FLAG_CSV_N		BIT(2)
 15
 16enum gb_svc_state {
 17	GB_SVC_STATE_RESET,
 18	GB_SVC_STATE_PROTOCOL_VERSION,
 19	GB_SVC_STATE_SVC_HELLO,
 20};
 21
 22enum gb_svc_watchdog_bite {
 23	GB_SVC_WATCHDOG_BITE_RESET_UNIPRO = 0,
 24	GB_SVC_WATCHDOG_BITE_PANIC_KERNEL,
 25};
 26
 27struct gb_svc_watchdog;
 28
 29struct svc_debugfs_pwrmon_rail {
 30	u8 id;
 31	struct gb_svc *svc;
 32};
 33
 34struct gb_svc {
 35	struct device		dev;
 36
 37	struct gb_host_device	*hd;
 38	struct gb_connection	*connection;
 39	enum gb_svc_state	state;
 40	struct ida		device_id_map;
 41	struct workqueue_struct	*wq;
 42
 43	u16 endo_id;
 44	u8 ap_intf_id;
 45
 46	u8 protocol_major;
 47	u8 protocol_minor;
 48
 49	struct gb_svc_watchdog	*watchdog;
 50	enum gb_svc_watchdog_bite action;
 51
 52	struct dentry *debugfs_dentry;
 53	struct svc_debugfs_pwrmon_rail *pwrmon_rails;
 54};
 55#define to_gb_svc(d) container_of(d, struct gb_svc, dev)
 56
 57struct gb_svc *gb_svc_create(struct gb_host_device *hd);
 58int gb_svc_add(struct gb_svc *svc);
 59void gb_svc_del(struct gb_svc *svc);
 60void gb_svc_put(struct gb_svc *svc);
 61
 62int gb_svc_pwrmon_intf_sample_get(struct gb_svc *svc, u8 intf_id,
 63				  u8 measurement_type, u32 *value);
 64int gb_svc_intf_device_id(struct gb_svc *svc, u8 intf_id, u8 device_id);
 65int gb_svc_route_create(struct gb_svc *svc, u8 intf1_id, u8 dev1_id,
 66			       u8 intf2_id, u8 dev2_id);
 67void gb_svc_route_destroy(struct gb_svc *svc, u8 intf1_id, u8 intf2_id);
 68int gb_svc_connection_create(struct gb_svc *svc, u8 intf1_id, u16 cport1_id,
 69			     u8 intf2_id, u16 cport2_id, u8 cport_flags);
 70void gb_svc_connection_destroy(struct gb_svc *svc, u8 intf1_id, u16 cport1_id,
 71			       u8 intf2_id, u16 cport2_id);
 72int gb_svc_intf_eject(struct gb_svc *svc, u8 intf_id);
 73int gb_svc_intf_vsys_set(struct gb_svc *svc, u8 intf_id, bool enable);
 74int gb_svc_intf_refclk_set(struct gb_svc *svc, u8 intf_id, bool enable);
 75int gb_svc_intf_unipro_set(struct gb_svc *svc, u8 intf_id, bool enable);
 76int gb_svc_intf_activate(struct gb_svc *svc, u8 intf_id, u8 *intf_type);
 77int gb_svc_intf_resume(struct gb_svc *svc, u8 intf_id);
 78
 79int gb_svc_dme_peer_get(struct gb_svc *svc, u8 intf_id, u16 attr, u16 selector,
 80			u32 *value);
 81int gb_svc_dme_peer_set(struct gb_svc *svc, u8 intf_id, u16 attr, u16 selector,
 82			u32 value);
 83int gb_svc_intf_set_power_mode(struct gb_svc *svc, u8 intf_id, u8 hs_series,
 84			       u8 tx_mode, u8 tx_gear, u8 tx_nlanes,
 85			       u8 tx_amplitude, u8 tx_hs_equalizer,
 86			       u8 rx_mode, u8 rx_gear, u8 rx_nlanes,
 87			       u8 flags, u32 quirks,
 88			       struct gb_svc_l2_timer_cfg *local,
 89			       struct gb_svc_l2_timer_cfg *remote);
 90int gb_svc_intf_set_power_mode_hibernate(struct gb_svc *svc, u8 intf_id);
 91int gb_svc_ping(struct gb_svc *svc);
 92int gb_svc_watchdog_create(struct gb_svc *svc);
 93void gb_svc_watchdog_destroy(struct gb_svc *svc);
 94bool gb_svc_watchdog_enabled(struct gb_svc *svc);
 95int gb_svc_watchdog_enable(struct gb_svc *svc);
 96int gb_svc_watchdog_disable(struct gb_svc *svc);
 97
 98int gb_svc_protocol_init(void);
 99void gb_svc_protocol_exit(void);
100
101#endif /* __SVC_H */