lkml.org 
[lkml]   [2017]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 11/24] thunderbolt: Move control channel messages to tb_msgs.h
    Date
    We will be forwarding notifications received from the control channel to
    the connection manager implementations. This way they can decide what to
    do if anything when a notification is received.

    To be able to use control channel messages from other files, move them
    to tb_msgs.h.

    No functional changes intended.

    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Reviewed-by: Yehezkel Bernat <yehezkel.bernat@intel.com>
    Reviewed-by: Michael Jamet <michael.jamet@intel.com>
    ---
    drivers/thunderbolt/ctl.c | 76 -----------------------------
    drivers/thunderbolt/ctl.h | 16 +------
    drivers/thunderbolt/tb_msgs.h | 108 ++++++++++++++++++++++++++++++++++++++++++
    3 files changed, 109 insertions(+), 91 deletions(-)
    create mode 100644 drivers/thunderbolt/tb_msgs.h

    diff --git a/drivers/thunderbolt/ctl.c b/drivers/thunderbolt/ctl.c
    index 889a32dd21e7..08bdb7145d89 100644
    --- a/drivers/thunderbolt/ctl.c
    +++ b/drivers/thunderbolt/ctl.c
    @@ -52,82 +52,6 @@ struct tb_ctl {
    #define tb_ctl_info(ctl, format, arg...) \
    dev_info(&(ctl)->nhi->pdev->dev, format, ## arg)

    -
    -/* configuration packets definitions */
    -
    -enum tb_cfg_pkg_type {
    - TB_CFG_PKG_READ = 1,
    - TB_CFG_PKG_WRITE = 2,
    - TB_CFG_PKG_ERROR = 3,
    - TB_CFG_PKG_NOTIFY_ACK = 4,
    - TB_CFG_PKG_EVENT = 5,
    - TB_CFG_PKG_XDOMAIN_REQ = 6,
    - TB_CFG_PKG_XDOMAIN_RESP = 7,
    - TB_CFG_PKG_OVERRIDE = 8,
    - TB_CFG_PKG_RESET = 9,
    - TB_CFG_PKG_PREPARE_TO_SLEEP = 0xd,
    -};
    -
    -/* common header */
    -struct tb_cfg_header {
    - u32 route_hi:22;
    - u32 unknown:10; /* highest order bit is set on replies */
    - u32 route_lo;
    -} __packed;
    -
    -/* additional header for read/write packets */
    -struct tb_cfg_address {
    - u32 offset:13; /* in dwords */
    - u32 length:6; /* in dwords */
    - u32 port:6;
    - enum tb_cfg_space space:2;
    - u32 seq:2; /* sequence number */
    - u32 zero:3;
    -} __packed;
    -
    -/* TB_CFG_PKG_READ, response for TB_CFG_PKG_WRITE */
    -struct cfg_read_pkg {
    - struct tb_cfg_header header;
    - struct tb_cfg_address addr;
    -} __packed;
    -
    -/* TB_CFG_PKG_WRITE, response for TB_CFG_PKG_READ */
    -struct cfg_write_pkg {
    - struct tb_cfg_header header;
    - struct tb_cfg_address addr;
    - u32 data[64]; /* maximum size, tb_cfg_address.length has 6 bits */
    -} __packed;
    -
    -/* TB_CFG_PKG_ERROR */
    -struct cfg_error_pkg {
    - struct tb_cfg_header header;
    - enum tb_cfg_error error:4;
    - u32 zero1:4;
    - u32 port:6;
    - u32 zero2:2; /* Both should be zero, still they are different fields. */
    - u32 zero3:16;
    -} __packed;
    -
    -/* TB_CFG_PKG_EVENT */
    -struct cfg_event_pkg {
    - struct tb_cfg_header header;
    - u32 port:6;
    - u32 zero:25;
    - bool unplug:1;
    -} __packed;
    -
    -/* TB_CFG_PKG_RESET */
    -struct cfg_reset_pkg {
    - struct tb_cfg_header header;
    -} __packed;
    -
    -/* TB_CFG_PKG_PREPARE_TO_SLEEP */
    -struct cfg_pts_pkg {
    - struct tb_cfg_header header;
    - u32 data;
    -} __packed;
    -
    -
    /* utility functions */

    static u64 get_route(struct tb_cfg_header header)
    diff --git a/drivers/thunderbolt/ctl.h b/drivers/thunderbolt/ctl.h
    index 83ae54947082..610980e3232f 100644
    --- a/drivers/thunderbolt/ctl.h
    +++ b/drivers/thunderbolt/ctl.h
    @@ -8,6 +8,7 @@
    #define _TB_CFG

    #include "nhi.h"
    +#include "tb_msgs.h"

    /* control channel */
    struct tb_ctl;
    @@ -23,21 +24,6 @@ void tb_ctl_free(struct tb_ctl *ctl);

    #define TB_CFG_DEFAULT_TIMEOUT 5000 /* msec */

    -enum tb_cfg_space {
    - TB_CFG_HOPS = 0,
    - TB_CFG_PORT = 1,
    - TB_CFG_SWITCH = 2,
    - TB_CFG_COUNTERS = 3,
    -};
    -
    -enum tb_cfg_error {
    - TB_CFG_ERROR_PORT_NOT_CONNECTED = 0,
    - TB_CFG_ERROR_INVALID_CONFIG_SPACE = 2,
    - TB_CFG_ERROR_NO_SUCH_PORT = 4,
    - TB_CFG_ERROR_ACK_PLUG_EVENT = 7, /* send as reply to TB_CFG_PKG_EVENT */
    - TB_CFG_ERROR_LOOP = 8,
    -};
    -
    struct tb_cfg_result {
    u64 response_route;
    u32 response_port; /*
    diff --git a/drivers/thunderbolt/tb_msgs.h b/drivers/thunderbolt/tb_msgs.h
    new file mode 100644
    index 000000000000..761d56287149
    --- /dev/null
    +++ b/drivers/thunderbolt/tb_msgs.h
    @@ -0,0 +1,108 @@
    +/*
    + * Thunderbolt control channel messages
    + *
    + * Copyright (C) 2014 Andreas Noever <andreas.noever@gmail.com>
    + * Copyright (C) 2017, Intel Corporation
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License version 2 as
    + * published by the Free Software Foundation.
    + */
    +
    +#ifndef _TB_MSGS
    +#define _TB_MSGS
    +
    +#include <linux/types.h>
    +
    +enum tb_cfg_pkg_type {
    + TB_CFG_PKG_READ = 1,
    + TB_CFG_PKG_WRITE = 2,
    + TB_CFG_PKG_ERROR = 3,
    + TB_CFG_PKG_NOTIFY_ACK = 4,
    + TB_CFG_PKG_EVENT = 5,
    + TB_CFG_PKG_XDOMAIN_REQ = 6,
    + TB_CFG_PKG_XDOMAIN_RESP = 7,
    + TB_CFG_PKG_OVERRIDE = 8,
    + TB_CFG_PKG_RESET = 9,
    + TB_CFG_PKG_PREPARE_TO_SLEEP = 0xd,
    +
    +};
    +
    +enum tb_cfg_space {
    + TB_CFG_HOPS = 0,
    + TB_CFG_PORT = 1,
    + TB_CFG_SWITCH = 2,
    + TB_CFG_COUNTERS = 3,
    +};
    +
    +enum tb_cfg_error {
    + TB_CFG_ERROR_PORT_NOT_CONNECTED = 0,
    + TB_CFG_ERROR_LINK_ERROR = 1,
    + TB_CFG_ERROR_INVALID_CONFIG_SPACE = 2,
    + TB_CFG_ERROR_NO_SUCH_PORT = 4,
    + TB_CFG_ERROR_ACK_PLUG_EVENT = 7, /* send as reply to TB_CFG_PKG_EVENT */
    + TB_CFG_ERROR_LOOP = 8,
    + TB_CFG_ERROR_HEC_ERROR_DETECTED = 12,
    + TB_CFG_ERROR_FLOW_CONTROL_ERROR = 13,
    +};
    +
    +/* common header */
    +struct tb_cfg_header {
    + u32 route_hi:22;
    + u32 unknown:10; /* highest order bit is set on replies */
    + u32 route_lo;
    +} __packed;
    +
    +/* additional header for read/write packets */
    +struct tb_cfg_address {
    + u32 offset:13; /* in dwords */
    + u32 length:6; /* in dwords */
    + u32 port:6;
    + enum tb_cfg_space space:2;
    + u32 seq:2; /* sequence number */
    + u32 zero:3;
    +} __packed;
    +
    +/* TB_CFG_PKG_READ, response for TB_CFG_PKG_WRITE */
    +struct cfg_read_pkg {
    + struct tb_cfg_header header;
    + struct tb_cfg_address addr;
    +} __packed;
    +
    +/* TB_CFG_PKG_WRITE, response for TB_CFG_PKG_READ */
    +struct cfg_write_pkg {
    + struct tb_cfg_header header;
    + struct tb_cfg_address addr;
    + u32 data[64]; /* maximum size, tb_cfg_address.length has 6 bits */
    +} __packed;
    +
    +/* TB_CFG_PKG_ERROR */
    +struct cfg_error_pkg {
    + struct tb_cfg_header header;
    + enum tb_cfg_error error:4;
    + u32 zero1:4;
    + u32 port:6;
    + u32 zero2:2; /* Both should be zero, still they are different fields. */
    + u32 zero3:16;
    +} __packed;
    +
    +/* TB_CFG_PKG_EVENT */
    +struct cfg_event_pkg {
    + struct tb_cfg_header header;
    + u32 port:6;
    + u32 zero:25;
    + bool unplug:1;
    +} __packed;
    +
    +/* TB_CFG_PKG_RESET */
    +struct cfg_reset_pkg {
    + struct tb_cfg_header header;
    +} __packed;
    +
    +/* TB_CFG_PKG_PREPARE_TO_SLEEP */
    +struct cfg_pts_pkg {
    + struct tb_cfg_header header;
    + u32 data;
    +} __packed;
    +
    +#endif
    --
    2.11.0
    \
     
     \ /
      Last update: 2017-05-18 16:43    [W:3.877 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site