diff options
author | David Kershner <david.kershner@unisys.com> | 2016-09-19 17:09:21 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-09-20 07:26:20 -0400 |
commit | 511474a5077b088f92166a7875af5e6fa428e465 (patch) | |
tree | 30020dc1fad9cbafaea6e9c951a75de87926e8bb /drivers/staging | |
parent | 3d8394c86f1b482ec2509e5a152484a27cc6cc74 (diff) |
staging: unisys: visorbus: move handle_command
Handle_command gets moved lower in the file to avoid the need for
extraneous function prototypes.
Reported-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: David Kershner <david.kershner@unisys.com>
Reviewed-by: Tim Sell <Timothy.Sell@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/unisys/visorbus/visorchipset.c | 230 |
1 files changed, 115 insertions, 115 deletions
diff --git a/drivers/staging/unisys/visorbus/visorchipset.c b/drivers/staging/unisys/visorbus/visorchipset.c index 7cb7c0073a7e..168d42fca939 100644 --- a/drivers/staging/unisys/visorbus/visorchipset.c +++ b/drivers/staging/unisys/visorbus/visorchipset.c | |||
@@ -1609,121 +1609,6 @@ parahotplug_process_message(struct controlvm_message *inmsg) | |||
1609 | } | 1609 | } |
1610 | } | 1610 | } |
1611 | 1611 | ||
1612 | /** | ||
1613 | * handle_command() - process a controlvm message | ||
1614 | * @inmsg: the message to process | ||
1615 | * @channel_addr: address of the controlvm channel | ||
1616 | * | ||
1617 | * Return: | ||
1618 | * false - this function will return false only in the case where the | ||
1619 | * controlvm message was NOT processed, but processing must be | ||
1620 | * retried before reading the next controlvm message; a | ||
1621 | * scenario where this can occur is when we need to throttle | ||
1622 | * the allocation of memory in which to copy out controlvm | ||
1623 | * payload data | ||
1624 | * true - processing of the controlvm message completed, | ||
1625 | * either successfully or with an error | ||
1626 | */ | ||
1627 | static bool | ||
1628 | handle_command(struct controlvm_message inmsg, u64 channel_addr) | ||
1629 | { | ||
1630 | struct controlvm_message_packet *cmd = &inmsg.cmd; | ||
1631 | u64 parm_addr; | ||
1632 | u32 parm_bytes; | ||
1633 | struct parser_context *parser_ctx = NULL; | ||
1634 | bool local_addr; | ||
1635 | struct controlvm_message ackmsg; | ||
1636 | |||
1637 | /* create parsing context if necessary */ | ||
1638 | local_addr = (inmsg.hdr.flags.test_message == 1); | ||
1639 | if (channel_addr == 0) | ||
1640 | return true; | ||
1641 | parm_addr = channel_addr + inmsg.hdr.payload_vm_offset; | ||
1642 | parm_bytes = inmsg.hdr.payload_bytes; | ||
1643 | |||
1644 | /* | ||
1645 | * Parameter and channel addresses within test messages actually lie | ||
1646 | * within our OS-controlled memory. We need to know that, because it | ||
1647 | * makes a difference in how we compute the virtual address. | ||
1648 | */ | ||
1649 | if (parm_addr && parm_bytes) { | ||
1650 | bool retry = false; | ||
1651 | |||
1652 | parser_ctx = | ||
1653 | parser_init_byte_stream(parm_addr, parm_bytes, | ||
1654 | local_addr, &retry); | ||
1655 | if (!parser_ctx && retry) | ||
1656 | return false; | ||
1657 | } | ||
1658 | |||
1659 | if (!local_addr) { | ||
1660 | controlvm_init_response(&ackmsg, &inmsg.hdr, | ||
1661 | CONTROLVM_RESP_SUCCESS); | ||
1662 | if (controlvm_channel) | ||
1663 | visorchannel_signalinsert(controlvm_channel, | ||
1664 | CONTROLVM_QUEUE_ACK, | ||
1665 | &ackmsg); | ||
1666 | } | ||
1667 | switch (inmsg.hdr.id) { | ||
1668 | case CONTROLVM_CHIPSET_INIT: | ||
1669 | chipset_init(&inmsg); | ||
1670 | break; | ||
1671 | case CONTROLVM_BUS_CREATE: | ||
1672 | bus_create(&inmsg); | ||
1673 | break; | ||
1674 | case CONTROLVM_BUS_DESTROY: | ||
1675 | bus_destroy(&inmsg); | ||
1676 | break; | ||
1677 | case CONTROLVM_BUS_CONFIGURE: | ||
1678 | bus_configure(&inmsg, parser_ctx); | ||
1679 | break; | ||
1680 | case CONTROLVM_DEVICE_CREATE: | ||
1681 | my_device_create(&inmsg); | ||
1682 | break; | ||
1683 | case CONTROLVM_DEVICE_CHANGESTATE: | ||
1684 | if (cmd->device_change_state.flags.phys_device) { | ||
1685 | parahotplug_process_message(&inmsg); | ||
1686 | } else { | ||
1687 | /* | ||
1688 | * save the hdr and cmd structures for later use | ||
1689 | * when sending back the response to Command | ||
1690 | */ | ||
1691 | my_device_changestate(&inmsg); | ||
1692 | break; | ||
1693 | } | ||
1694 | break; | ||
1695 | case CONTROLVM_DEVICE_DESTROY: | ||
1696 | my_device_destroy(&inmsg); | ||
1697 | break; | ||
1698 | case CONTROLVM_DEVICE_CONFIGURE: | ||
1699 | /* no op for now, just send a respond that we passed */ | ||
1700 | if (inmsg.hdr.flags.response_expected) | ||
1701 | controlvm_respond(&inmsg.hdr, CONTROLVM_RESP_SUCCESS); | ||
1702 | break; | ||
1703 | case CONTROLVM_CHIPSET_READY: | ||
1704 | chipset_ready(&inmsg.hdr); | ||
1705 | break; | ||
1706 | case CONTROLVM_CHIPSET_SELFTEST: | ||
1707 | chipset_selftest(&inmsg.hdr); | ||
1708 | break; | ||
1709 | case CONTROLVM_CHIPSET_STOP: | ||
1710 | chipset_notready(&inmsg.hdr); | ||
1711 | break; | ||
1712 | default: | ||
1713 | if (inmsg.hdr.flags.response_expected) | ||
1714 | controlvm_respond | ||
1715 | (&inmsg.hdr, | ||
1716 | -CONTROLVM_RESP_ERROR_MESSAGE_ID_UNKNOWN); | ||
1717 | break; | ||
1718 | } | ||
1719 | |||
1720 | if (parser_ctx) { | ||
1721 | parser_done(parser_ctx); | ||
1722 | parser_ctx = NULL; | ||
1723 | } | ||
1724 | return true; | ||
1725 | } | ||
1726 | |||
1727 | static inline unsigned int | 1612 | static inline unsigned int |
1728 | issue_vmcall_io_controlvm_addr(u64 *control_addr, u32 *control_bytes) | 1613 | issue_vmcall_io_controlvm_addr(u64 *control_addr, u32 *control_bytes) |
1729 | { | 1614 | { |
@@ -2091,6 +1976,121 @@ visorchipset_file_cleanup(dev_t major_dev) | |||
2091 | unregister_chrdev_region(major_dev, 1); | 1976 | unregister_chrdev_region(major_dev, 1); |
2092 | } | 1977 | } |
2093 | 1978 | ||
1979 | /** | ||
1980 | * handle_command() - process a controlvm message | ||
1981 | * @inmsg: the message to process | ||
1982 | * @channel_addr: address of the controlvm channel | ||
1983 | * | ||
1984 | * Return: | ||
1985 | * false - this function will return false only in the case where the | ||
1986 | * controlvm message was NOT processed, but processing must be | ||
1987 | * retried before reading the next controlvm message; a | ||
1988 | * scenario where this can occur is when we need to throttle | ||
1989 | * the allocation of memory in which to copy out controlvm | ||
1990 | * payload data | ||
1991 | * true - processing of the controlvm message completed, | ||
1992 | * either successfully or with an error | ||
1993 | */ | ||
1994 | static bool | ||
1995 | handle_command(struct controlvm_message inmsg, u64 channel_addr) | ||
1996 | { | ||
1997 | struct controlvm_message_packet *cmd = &inmsg.cmd; | ||
1998 | u64 parm_addr; | ||
1999 | u32 parm_bytes; | ||
2000 | struct parser_context *parser_ctx = NULL; | ||
2001 | bool local_addr; | ||
2002 | struct controlvm_message ackmsg; | ||
2003 | |||
2004 | /* create parsing context if necessary */ | ||
2005 | local_addr = (inmsg.hdr.flags.test_message == 1); | ||
2006 | if (channel_addr == 0) | ||
2007 | return true; | ||
2008 | parm_addr = channel_addr + inmsg.hdr.payload_vm_offset; | ||
2009 | parm_bytes = inmsg.hdr.payload_bytes; | ||
2010 | |||
2011 | /* | ||
2012 | * Parameter and channel addresses within test messages actually lie | ||
2013 | * within our OS-controlled memory. We need to know that, because it | ||
2014 | * makes a difference in how we compute the virtual address. | ||
2015 | */ | ||
2016 | if (parm_addr && parm_bytes) { | ||
2017 | bool retry = false; | ||
2018 | |||
2019 | parser_ctx = | ||
2020 | parser_init_byte_stream(parm_addr, parm_bytes, | ||
2021 | local_addr, &retry); | ||
2022 | if (!parser_ctx && retry) | ||
2023 | return false; | ||
2024 | } | ||
2025 | |||
2026 | if (!local_addr) { | ||
2027 | controlvm_init_response(&ackmsg, &inmsg.hdr, | ||
2028 | CONTROLVM_RESP_SUCCESS); | ||
2029 | if (controlvm_channel) | ||
2030 | visorchannel_signalinsert(controlvm_channel, | ||
2031 | CONTROLVM_QUEUE_ACK, | ||
2032 | &ackmsg); | ||
2033 | } | ||
2034 | switch (inmsg.hdr.id) { | ||
2035 | case CONTROLVM_CHIPSET_INIT: | ||
2036 | chipset_init(&inmsg); | ||
2037 | break; | ||
2038 | case CONTROLVM_BUS_CREATE: | ||
2039 | bus_create(&inmsg); | ||
2040 | break; | ||
2041 | case CONTROLVM_BUS_DESTROY: | ||
2042 | bus_destroy(&inmsg); | ||
2043 | break; | ||
2044 | case CONTROLVM_BUS_CONFIGURE: | ||
2045 | bus_configure(&inmsg, parser_ctx); | ||
2046 | break; | ||
2047 | case CONTROLVM_DEVICE_CREATE: | ||
2048 | my_device_create(&inmsg); | ||
2049 | break; | ||
2050 | case CONTROLVM_DEVICE_CHANGESTATE: | ||
2051 | if (cmd->device_change_state.flags.phys_device) { | ||
2052 | parahotplug_process_message(&inmsg); | ||
2053 | } else { | ||
2054 | /* | ||
2055 | * save the hdr and cmd structures for later use | ||
2056 | * when sending back the response to Command | ||
2057 | */ | ||
2058 | my_device_changestate(&inmsg); | ||
2059 | break; | ||
2060 | } | ||
2061 | break; | ||
2062 | case CONTROLVM_DEVICE_DESTROY: | ||
2063 | my_device_destroy(&inmsg); | ||
2064 | break; | ||
2065 | case CONTROLVM_DEVICE_CONFIGURE: | ||
2066 | /* no op for now, just send a respond that we passed */ | ||
2067 | if (inmsg.hdr.flags.response_expected) | ||
2068 | controlvm_respond(&inmsg.hdr, CONTROLVM_RESP_SUCCESS); | ||
2069 | break; | ||
2070 | case CONTROLVM_CHIPSET_READY: | ||
2071 | chipset_ready(&inmsg.hdr); | ||
2072 | break; | ||
2073 | case CONTROLVM_CHIPSET_SELFTEST: | ||
2074 | chipset_selftest(&inmsg.hdr); | ||
2075 | break; | ||
2076 | case CONTROLVM_CHIPSET_STOP: | ||
2077 | chipset_notready(&inmsg.hdr); | ||
2078 | break; | ||
2079 | default: | ||
2080 | if (inmsg.hdr.flags.response_expected) | ||
2081 | controlvm_respond | ||
2082 | (&inmsg.hdr, | ||
2083 | -CONTROLVM_RESP_ERROR_MESSAGE_ID_UNKNOWN); | ||
2084 | break; | ||
2085 | } | ||
2086 | |||
2087 | if (parser_ctx) { | ||
2088 | parser_done(parser_ctx); | ||
2089 | parser_ctx = NULL; | ||
2090 | } | ||
2091 | return true; | ||
2092 | } | ||
2093 | |||
2094 | static void | 2094 | static void |
2095 | controlvm_periodic_work(struct work_struct *work) | 2095 | controlvm_periodic_work(struct work_struct *work) |
2096 | { | 2096 | { |