Alex Elder | 30c6d9d | 2015-05-22 13:02:08 -0500 | [diff] [blame] | 1 | /* |
| 2 | * Greybus SVC code |
| 3 | * |
| 4 | * Copyright 2015 Google Inc. |
| 5 | * Copyright 2015 Linaro Ltd. |
| 6 | * |
| 7 | * Released under the GPLv2 only. |
| 8 | */ |
| 9 | |
| 10 | #ifndef __SVC_H |
| 11 | #define __SVC_H |
| 12 | |
Johan Hovold | 9ba486e | 2016-03-29 18:55:59 -0400 | [diff] [blame] | 13 | #define GB_SVC_CPORT_FLAG_E2EFC BIT(0) |
| 14 | #define GB_SVC_CPORT_FLAG_CSD_N BIT(1) |
| 15 | #define GB_SVC_CPORT_FLAG_CSV_N BIT(2) |
Johan Hovold | 27f25c1 | 2016-03-03 13:34:38 +0100 | [diff] [blame] | 16 | |
Johan Hovold | 88f7b96 | 2015-11-25 15:59:08 +0100 | [diff] [blame] | 17 | enum gb_svc_state { |
| 18 | GB_SVC_STATE_RESET, |
| 19 | GB_SVC_STATE_PROTOCOL_VERSION, |
| 20 | GB_SVC_STATE_SVC_HELLO, |
| 21 | }; |
| 22 | |
David Lin | 7c4a0ed | 2016-07-26 16:27:28 -0700 | [diff] [blame] | 23 | enum gb_svc_watchdog_bite { |
| 24 | GB_SVC_WATCHDOG_BITE_RESET_UNIPRO = 0, |
| 25 | GB_SVC_WATCHDOG_BITE_PANIC_KERNEL, |
| 26 | }; |
| 27 | |
Greg Kroah-Hartman | ed7279a | 2016-01-20 22:51:49 -0800 | [diff] [blame] | 28 | struct gb_svc_watchdog; |
| 29 | |
David Lin | 9504677 | 2016-04-20 16:55:08 -0700 | [diff] [blame] | 30 | struct svc_debugfs_pwrmon_rail { |
| 31 | u8 id; |
| 32 | struct gb_svc *svc; |
| 33 | }; |
| 34 | |
Johan Hovold | 88f7b96 | 2015-11-25 15:59:08 +0100 | [diff] [blame] | 35 | struct gb_svc { |
| 36 | struct device dev; |
| 37 | |
Johan Hovold | f0960d0 | 2015-12-03 19:18:02 +0100 | [diff] [blame] | 38 | struct gb_host_device *hd; |
Johan Hovold | 88f7b96 | 2015-11-25 15:59:08 +0100 | [diff] [blame] | 39 | struct gb_connection *connection; |
| 40 | enum gb_svc_state state; |
| 41 | struct ida device_id_map; |
Johan Hovold | 3e48aca | 2015-12-02 18:23:31 +0100 | [diff] [blame] | 42 | struct workqueue_struct *wq; |
Johan Hovold | 66069fb | 2015-11-25 15:59:09 +0100 | [diff] [blame] | 43 | |
| 44 | u16 endo_id; |
| 45 | u8 ap_intf_id; |
Johan Hovold | 357de00 | 2016-01-19 12:51:19 +0100 | [diff] [blame] | 46 | |
| 47 | u8 protocol_major; |
| 48 | u8 protocol_minor; |
Rui Miguel Silva | ebe99d6 | 2016-01-21 01:42:17 +0000 | [diff] [blame] | 49 | |
Greg Kroah-Hartman | ed7279a | 2016-01-20 22:51:49 -0800 | [diff] [blame] | 50 | struct gb_svc_watchdog *watchdog; |
David Lin | 7c4a0ed | 2016-07-26 16:27:28 -0700 | [diff] [blame] | 51 | enum gb_svc_watchdog_bite action; |
David Lin | 9504677 | 2016-04-20 16:55:08 -0700 | [diff] [blame] | 52 | |
| 53 | struct dentry *debugfs_dentry; |
| 54 | struct svc_debugfs_pwrmon_rail *pwrmon_rails; |
Johan Hovold | 88f7b96 | 2015-11-25 15:59:08 +0100 | [diff] [blame] | 55 | }; |
Johan Hovold | b77e3e5 | 2016-03-30 16:53:17 -0400 | [diff] [blame] | 56 | #define to_gb_svc(d) container_of(d, struct gb_svc, dev) |
Alex Elder | 30c6d9d | 2015-05-22 13:02:08 -0500 | [diff] [blame] | 57 | |
Johan Hovold | 7adeaae7 | 2015-12-07 15:05:37 +0100 | [diff] [blame] | 58 | struct gb_svc *gb_svc_create(struct gb_host_device *hd); |
| 59 | int gb_svc_add(struct gb_svc *svc); |
| 60 | void gb_svc_del(struct gb_svc *svc); |
| 61 | void gb_svc_put(struct gb_svc *svc); |
| 62 | |
David Lin | ddb10c8 | 2016-04-07 20:15:30 -0700 | [diff] [blame] | 63 | int gb_svc_pwrmon_intf_sample_get(struct gb_svc *svc, u8 intf_id, |
| 64 | u8 measurement_type, u32 *value); |
Johan Hovold | 4d5f621 | 2016-03-29 18:56:04 -0400 | [diff] [blame] | 65 | int gb_svc_intf_device_id(struct gb_svc *svc, u8 intf_id, u8 device_id); |
| 66 | int gb_svc_route_create(struct gb_svc *svc, u8 intf1_id, u8 dev1_id, |
| 67 | u8 intf2_id, u8 dev2_id); |
| 68 | void gb_svc_route_destroy(struct gb_svc *svc, u8 intf1_id, u8 intf2_id); |
Alex Elder | 30c6d9d | 2015-05-22 13:02:08 -0500 | [diff] [blame] | 69 | int gb_svc_connection_create(struct gb_svc *svc, u8 intf1_id, u16 cport1_id, |
Johan Hovold | 27f25c1 | 2016-03-03 13:34:38 +0100 | [diff] [blame] | 70 | u8 intf2_id, u16 cport2_id, u8 cport_flags); |
Viresh Kumar | d9fcfff | 2015-08-31 17:21:05 +0530 | [diff] [blame] | 71 | void gb_svc_connection_destroy(struct gb_svc *svc, u8 intf1_id, u16 cport1_id, |
| 72 | u8 intf2_id, u16 cport2_id); |
Rui Miguel Silva | c5d55fb | 2016-01-11 13:46:31 +0000 | [diff] [blame] | 73 | int gb_svc_intf_eject(struct gb_svc *svc, u8 intf_id); |
Johan Hovold | 017482b | 2016-04-23 18:47:27 +0200 | [diff] [blame] | 74 | int gb_svc_intf_vsys_set(struct gb_svc *svc, u8 intf_id, bool enable); |
| 75 | int gb_svc_intf_refclk_set(struct gb_svc *svc, u8 intf_id, bool enable); |
| 76 | int gb_svc_intf_unipro_set(struct gb_svc *svc, u8 intf_id, bool enable); |
Johan Hovold | 1e8e22b | 2016-04-23 18:47:28 +0200 | [diff] [blame] | 77 | int gb_svc_intf_activate(struct gb_svc *svc, u8 intf_id, u8 *intf_type); |
David Lin | fc8a402 | 2016-07-07 22:07:00 -0500 | [diff] [blame] | 78 | int gb_svc_intf_resume(struct gb_svc *svc, u8 intf_id); |
| 79 | |
Viresh Kumar | 19151c3 | 2015-09-09 21:08:29 +0530 | [diff] [blame] | 80 | int gb_svc_dme_peer_get(struct gb_svc *svc, u8 intf_id, u16 attr, u16 selector, |
| 81 | u32 *value); |
| 82 | int gb_svc_dme_peer_set(struct gb_svc *svc, u8 intf_id, u16 attr, u16 selector, |
| 83 | u32 value); |
Laurent Pinchart | aab4a1a | 2016-01-06 16:16:46 +0200 | [diff] [blame] | 84 | int gb_svc_intf_set_power_mode(struct gb_svc *svc, u8 intf_id, u8 hs_series, |
| 85 | u8 tx_mode, u8 tx_gear, u8 tx_nlanes, |
Eli Sennesh | 8c2522d | 2016-06-03 11:24:44 -0400 | [diff] [blame] | 86 | u8 tx_amplitude, u8 tx_hs_equalizer, |
Laurent Pinchart | aab4a1a | 2016-01-06 16:16:46 +0200 | [diff] [blame] | 87 | u8 rx_mode, u8 rx_gear, u8 rx_nlanes, |
Eli Sennesh | 8c2522d | 2016-06-03 11:24:44 -0400 | [diff] [blame] | 88 | u8 flags, u32 quirks, |
| 89 | struct gb_svc_l2_timer_cfg *local, |
| 90 | struct gb_svc_l2_timer_cfg *remote); |
David Lin | c7dc28f | 2016-07-07 22:07:00 -0500 | [diff] [blame] | 91 | int gb_svc_intf_set_power_mode_hibernate(struct gb_svc *svc, u8 intf_id); |
Greg Kroah-Hartman | 55ec09e | 2016-01-19 23:30:42 -0800 | [diff] [blame] | 92 | int gb_svc_ping(struct gb_svc *svc); |
Greg Kroah-Hartman | ed7279a | 2016-01-20 22:51:49 -0800 | [diff] [blame] | 93 | int gb_svc_watchdog_create(struct gb_svc *svc); |
| 94 | void gb_svc_watchdog_destroy(struct gb_svc *svc); |
Greg Kroah-Hartman | d562853 | 2016-01-26 15:17:08 -0800 | [diff] [blame] | 95 | bool gb_svc_watchdog_enabled(struct gb_svc *svc); |
| 96 | int gb_svc_watchdog_enable(struct gb_svc *svc); |
| 97 | int gb_svc_watchdog_disable(struct gb_svc *svc); |
Bryan O'Donoghue | 5705020 | 2016-05-12 12:43:50 +0100 | [diff] [blame] | 98 | int gb_svc_timesync_enable(struct gb_svc *svc, u8 count, u64 frame_time, |
| 99 | u32 strobe_delay, u32 refclk); |
| 100 | int gb_svc_timesync_disable(struct gb_svc *svc); |
| 101 | int gb_svc_timesync_authoritative(struct gb_svc *svc, u64 *frame_time); |
| 102 | int gb_svc_timesync_ping(struct gb_svc *svc, u64 *frame_time); |
| 103 | int gb_svc_timesync_wake_pins_acquire(struct gb_svc *svc, u32 strobe_mask); |
| 104 | int gb_svc_timesync_wake_pins_release(struct gb_svc *svc); |
Alex Elder | 30c6d9d | 2015-05-22 13:02:08 -0500 | [diff] [blame] | 105 | |
Viresh Kumar | ab69c4c | 2015-07-03 17:00:29 +0530 | [diff] [blame] | 106 | int gb_svc_protocol_init(void); |
| 107 | void gb_svc_protocol_exit(void); |
Viresh Kumar | d3d4484 | 2015-07-21 17:44:18 +0530 | [diff] [blame] | 108 | |
Alex Elder | 30c6d9d | 2015-05-22 13:02:08 -0500 | [diff] [blame] | 109 | #endif /* __SVC_H */ |