]>
Commit | Line | Data |
---|---|---|
f25bf6fc AN |
1 | /* |
2 | * Thunderbolt Cactus Ridge driver - control channel and configuration commands | |
3 | * | |
4 | * Copyright (c) 2014 Andreas Noever <andreas.noever@gmail.com> | |
5 | */ | |
6 | ||
7 | #ifndef _TB_CFG | |
8 | #define _TB_CFG | |
9 | ||
10 | #include "nhi.h" | |
32af9434 | 11 | #include "tb_msgs.h" |
f25bf6fc AN |
12 | |
13 | /* control channel */ | |
14 | struct tb_ctl; | |
15 | ||
16 | typedef void (*hotplug_cb)(void *data, u64 route, u8 port, bool unplug); | |
17 | ||
18 | struct tb_ctl *tb_ctl_alloc(struct tb_nhi *nhi, hotplug_cb cb, void *cb_data); | |
19 | void tb_ctl_start(struct tb_ctl *ctl); | |
20 | void tb_ctl_stop(struct tb_ctl *ctl); | |
21 | void tb_ctl_free(struct tb_ctl *ctl); | |
22 | ||
23 | /* configuration commands */ | |
24 | ||
25 | #define TB_CFG_DEFAULT_TIMEOUT 5000 /* msec */ | |
26 | ||
f25bf6fc AN |
27 | struct tb_cfg_result { |
28 | u64 response_route; | |
29 | u32 response_port; /* | |
30 | * If err = 1 then this is the port that send the | |
31 | * error. | |
32 | * If err = 0 and if this was a cfg_read/write then | |
33 | * this is the the upstream port of the responding | |
34 | * switch. | |
35 | * Otherwise the field is set to zero. | |
36 | */ | |
37 | int err; /* negative errors, 0 for success, 1 for tb errors */ | |
38 | enum tb_cfg_error tb_error; /* valid if err == 1 */ | |
39 | }; | |
40 | ||
41 | ||
42 | int tb_cfg_error(struct tb_ctl *ctl, u64 route, u32 port, | |
43 | enum tb_cfg_error error); | |
44 | struct tb_cfg_result tb_cfg_reset(struct tb_ctl *ctl, u64 route, | |
45 | int timeout_msec); | |
46 | struct tb_cfg_result tb_cfg_read_raw(struct tb_ctl *ctl, void *buffer, | |
47 | u64 route, u32 port, | |
48 | enum tb_cfg_space space, u32 offset, | |
49 | u32 length, int timeout_msec); | |
16a1258a | 50 | struct tb_cfg_result tb_cfg_write_raw(struct tb_ctl *ctl, const void *buffer, |
f25bf6fc AN |
51 | u64 route, u32 port, |
52 | enum tb_cfg_space space, u32 offset, | |
53 | u32 length, int timeout_msec); | |
54 | int tb_cfg_read(struct tb_ctl *ctl, void *buffer, u64 route, u32 port, | |
55 | enum tb_cfg_space space, u32 offset, u32 length); | |
16a1258a | 56 | int tb_cfg_write(struct tb_ctl *ctl, const void *buffer, u64 route, u32 port, |
f25bf6fc AN |
57 | enum tb_cfg_space space, u32 offset, u32 length); |
58 | int tb_cfg_get_upstream_port(struct tb_ctl *ctl, u64 route); | |
59 | ||
60 | ||
61 | #endif |