blob: bb22c52c2f019c1083f064f89af15a20e5211a07 [file] [log] [blame]
Alex Elderc68adb22014-10-01 21:54:14 -05001/*
2 * Greybus connections
3 *
4 * Copyright 2014 Google Inc.
5 *
6 * Released under the GPLv2 only.
7 */
8
9#ifndef __CONNECTION_H
10#define __CONNECTION_H
11
12#include <linux/list.h>
13
14#include "greybus.h"
Alex Elderc68adb22014-10-01 21:54:14 -050015
16struct gb_connection {
Alex Elderc68adb22014-10-01 21:54:14 -050017 struct greybus_host_device *hd;
Alex Eldercd345072014-10-02 12:30:05 -050018 struct gb_interface *interface;
19 u16 hd_cport_id;
20 u16 interface_cport_id;
Alex Elderc68adb22014-10-01 21:54:14 -050021
Alex Elderee9ebe42014-10-06 06:53:08 -050022 struct rb_node hd_node;
Alex Eldercd345072014-10-02 12:30:05 -050023 struct list_head interface_links;
Alex Elderad1c4492014-10-02 12:30:06 -050024 enum greybus_protocol protocol;
Alex Eldere88afa52014-10-01 21:54:15 -050025
26 struct list_head operations;
Alex Elder84d148b2014-10-16 06:35:32 -050027 struct rb_root pending; /* awaiting reponse */
Alex Eldere88afa52014-10-01 21:54:15 -050028 atomic_t op_cycle;
Alex Elder8a306722014-10-03 15:05:21 -050029
30 void *private;
Alex Elderc68adb22014-10-01 21:54:14 -050031};
32
Alex Eldercd345072014-10-02 12:30:05 -050033struct gb_connection *gb_connection_create(struct gb_interface *interface,
Alex Elderad1c4492014-10-02 12:30:06 -050034 u16 cport_id, enum greybus_protocol protocol);
Alex Elderb05890d2014-10-02 12:30:01 -050035void gb_connection_destroy(struct gb_connection *connection);
Alex Elderc68adb22014-10-01 21:54:14 -050036
Alex Elder574341c2014-10-16 06:35:35 -050037int gb_connection_init(struct gb_connection *connection);
38
Alex Elderee9ebe42014-10-06 06:53:08 -050039struct gb_connection *gb_hd_connection_find(struct greybus_host_device *hd,
40 u16 cport_id);
41
Alex Elder84d148b2014-10-16 06:35:32 -050042u16 gb_connection_operation_id(struct gb_connection *connection);
Alex Eldere88afa52014-10-01 21:54:15 -050043
Alex Eldereeeed422014-10-03 15:05:22 -050044__printf(2, 3)
45void gb_connection_err(struct gb_connection *connection, const char *fmt, ...);
46
Alex Elderc68adb22014-10-01 21:54:14 -050047#endif /* __CONNECTION_H */