aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorDavid Kershner <david.kershner@unisys.com>2016-09-19 17:09:21 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-09-20 07:26:20 -0400
commit511474a5077b088f92166a7875af5e6fa428e465 (patch)
tree30020dc1fad9cbafaea6e9c951a75de87926e8bb /drivers/staging
parent3d8394c86f1b482ec2509e5a152484a27cc6cc74 (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.c230
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 */
1627static bool
1628handle_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
1727static inline unsigned int 1612static inline unsigned int
1728issue_vmcall_io_controlvm_addr(u64 *control_addr, u32 *control_bytes) 1613issue_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 */
1994static bool
1995handle_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
2094static void 2094static void
2095controlvm_periodic_work(struct work_struct *work) 2095controlvm_periodic_work(struct work_struct *work)
2096{ 2096{