diff options
Diffstat (limited to 'kernel/drivers/staging/unisys/common-spar')
13 files changed, 0 insertions, 3403 deletions
diff --git a/kernel/drivers/staging/unisys/common-spar/include/channels/channel.h b/kernel/drivers/staging/unisys/common-spar/include/channels/channel.h deleted file mode 100644 index 6fb6e5b3d..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/channels/channel.h +++ /dev/null @@ -1,590 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -#ifndef __CHANNEL_H__ -#define __CHANNEL_H__ - -#include <linux/types.h> -#include <linux/io.h> -#include <linux/uuid.h> - -/* -* Whenever this file is changed a corresponding change must be made in -* the Console/ServicePart/visordiag_early/supervisor_channel.h file -* which is needed for Linux kernel compiles. These two files must be -* in sync. -*/ - -/* define the following to prevent include nesting in kernel header - * files of similar abbreviated content - */ -#define __SUPERVISOR_CHANNEL_H__ - -#define SIGNATURE_16(A, B) ((A) | (B<<8)) -#define SIGNATURE_32(A, B, C, D) \ - (SIGNATURE_16(A, B) | (SIGNATURE_16(C, D) << 16)) -#define SIGNATURE_64(A, B, C, D, E, F, G, H) \ - (SIGNATURE_32(A, B, C, D) | ((u64)(SIGNATURE_32(E, F, G, H)) << 32)) - -#ifndef lengthof -#define lengthof(TYPE, MEMBER) (sizeof(((TYPE *)0)->MEMBER)) -#endif -#ifndef COVERQ -#define COVERQ(v, d) (((v)+(d)-1) / (d)) -#endif -#ifndef COVER -#define COVER(v, d) ((d)*COVERQ(v, d)) -#endif - -#define ULTRA_CHANNEL_PROTOCOL_SIGNATURE SIGNATURE_32('E', 'C', 'N', 'L') - -enum channel_serverstate { - CHANNELSRV_UNINITIALIZED = 0, /* channel is in an undefined state */ - CHANNELSRV_READY = 1 /* channel has been initialized by server */ -}; - -enum channel_clientstate { - CHANNELCLI_DETACHED = 0, - CHANNELCLI_DISABLED = 1, /* client can see channel but is NOT - * allowed to use it unless given TBD - * explicit request (should actually be - * < DETACHED) */ - CHANNELCLI_ATTACHING = 2, /* legacy EFI client request - * for EFI server to attach */ - CHANNELCLI_ATTACHED = 3, /* idle, but client may want - * to use channel any time */ - CHANNELCLI_BUSY = 4, /* client either wants to use or is - * using channel */ - CHANNELCLI_OWNED = 5 /* "no worries" state - client can - * access channel anytime */ -}; - -static inline const u8 * -ULTRA_CHANNELCLI_STRING(u32 v) -{ - switch (v) { - case CHANNELCLI_DETACHED: - return (const u8 *)("DETACHED"); - case CHANNELCLI_DISABLED: - return (const u8 *)("DISABLED"); - case CHANNELCLI_ATTACHING: - return (const u8 *)("ATTACHING"); - case CHANNELCLI_ATTACHED: - return (const u8 *)("ATTACHED"); - case CHANNELCLI_BUSY: - return (const u8 *)("BUSY"); - case CHANNELCLI_OWNED: - return (const u8 *)("OWNED"); - default: - break; - } - return (const u8 *)("?"); -} - -#define SPAR_CHANNEL_SERVER_READY(ch) \ - (readl(&(ch)->srv_state) == CHANNELSRV_READY) - -#define ULTRA_VALID_CHANNELCLI_TRANSITION(o, n) \ - (((((o) == CHANNELCLI_DETACHED) && ((n) == CHANNELCLI_DISABLED)) || \ - (((o) == CHANNELCLI_ATTACHING) && ((n) == CHANNELCLI_DISABLED)) || \ - (((o) == CHANNELCLI_ATTACHED) && ((n) == CHANNELCLI_DISABLED)) || \ - (((o) == CHANNELCLI_ATTACHING) && ((n) == CHANNELCLI_DETACHED)) || \ - (((o) == CHANNELCLI_ATTACHED) && ((n) == CHANNELCLI_DETACHED)) || \ - (((o) == CHANNELCLI_DETACHED) && ((n) == CHANNELCLI_ATTACHING)) || \ - (((o) == CHANNELCLI_ATTACHING) && ((n) == CHANNELCLI_ATTACHED)) || \ - (((o) == CHANNELCLI_DETACHED) && ((n) == CHANNELCLI_ATTACHED)) || \ - (((o) == CHANNELCLI_BUSY) && ((n) == CHANNELCLI_ATTACHED)) || \ - (((o) == CHANNELCLI_ATTACHED) && ((n) == CHANNELCLI_BUSY)) || \ - (((o) == CHANNELCLI_DETACHED) && ((n) == CHANNELCLI_OWNED)) || \ - (((o) == CHANNELCLI_DISABLED) && ((n) == CHANNELCLI_OWNED)) || \ - (((o) == CHANNELCLI_ATTACHING) && ((n) == CHANNELCLI_OWNED)) || \ - (((o) == CHANNELCLI_ATTACHED) && ((n) == CHANNELCLI_OWNED)) || \ - (((o) == CHANNELCLI_BUSY) && ((n) == CHANNELCLI_OWNED)) || (0)) \ - ? (1) : (0)) - -#define SPAR_CHANNEL_CLIENT_CHK_TRANSITION(old, new, id, log, \ - file, line) \ - do { \ - if (!ULTRA_VALID_CHANNELCLI_TRANSITION(old, new)) \ - pr_info("%s Channel StateTransition INVALID! (%s) %s(%d)-->%s(%d) @%s:%d\n", \ - id, "CliState<x>", \ - ULTRA_CHANNELCLI_STRING(old), \ - old, \ - ULTRA_CHANNELCLI_STRING(new), \ - new, \ - pathname_last_n_nodes((u8 *)file, 4), \ - line); \ - } while (0) - -#define SPAR_CHANNEL_CLIENT_TRANSITION(ch, id, newstate, log) \ - do { \ - SPAR_CHANNEL_CLIENT_CHK_TRANSITION( \ - readl(&(((struct channel_header __iomem *)\ - (ch))->cli_state_os)), \ - newstate, id, log, __FILE__, __LINE__); \ - pr_info("%s Channel StateTransition (%s) %s(%d)-->%s(%d) @%s:%d\n", \ - id, "CliStateOS", \ - ULTRA_CHANNELCLI_STRING( \ - readl(&((struct channel_header __iomem *)\ - (ch))->cli_state_os)), \ - readl(&((struct channel_header __iomem *)\ - (ch))->cli_state_os), \ - ULTRA_CHANNELCLI_STRING(newstate), \ - newstate, \ - pathname_last_n_nodes(__FILE__, 4), __LINE__); \ - writel(newstate, &((struct channel_header __iomem *)\ - (ch))->cli_state_os); \ - mb(); /* required for channel synch */ \ - } while (0) - -/* Values for ULTRA_CHANNEL_PROTOCOL.CliErrorBoot: */ -/* throttling invalid boot channel statetransition error due to client - * disabled */ -#define ULTRA_CLIERRORBOOT_THROTTLEMSG_DISABLED 0x01 - -/* throttling invalid boot channel statetransition error due to client - * not attached */ -#define ULTRA_CLIERRORBOOT_THROTTLEMSG_NOTATTACHED 0x02 - -/* throttling invalid boot channel statetransition error due to busy channel */ -#define ULTRA_CLIERRORBOOT_THROTTLEMSG_BUSY 0x04 - -/* Values for ULTRA_CHANNEL_PROTOCOL.CliErrorOS: */ -/* throttling invalid guest OS channel statetransition error due to - * client disabled */ -#define ULTRA_CLIERROROS_THROTTLEMSG_DISABLED 0x01 - -/* throttling invalid guest OS channel statetransition error due to - * client not attached */ -#define ULTRA_CLIERROROS_THROTTLEMSG_NOTATTACHED 0x02 - -/* throttling invalid guest OS channel statetransition error due to - * busy channel */ -#define ULTRA_CLIERROROS_THROTTLEMSG_BUSY 0x04 - -/* Values for ULTRA_CHANNEL_PROTOCOL.Features: This define exists so -* that windows guest can look at the FeatureFlags in the io channel, -* and configure the windows driver to use interrupts or not based on -* this setting. This flag is set in uislib after the -* ULTRA_VHBA_init_channel is called. All feature bits for all -* channels should be defined here. The io channel feature bits are -* defined right here */ -#define ULTRA_IO_DRIVER_ENABLES_INTS (0x1ULL << 1) -#define ULTRA_IO_CHANNEL_IS_POLLING (0x1ULL << 3) -#define ULTRA_IO_IOVM_IS_OK_WITH_DRIVER_DISABLING_INTS (0x1ULL << 4) -#define ULTRA_IO_DRIVER_DISABLES_INTS (0x1ULL << 5) -#define ULTRA_IO_DRIVER_SUPPORTS_ENHANCED_RCVBUF_CHECKING (0x1ULL << 6) - -#pragma pack(push, 1) /* both GCC and VC now allow this pragma */ -/* Common Channel Header */ -struct channel_header { - u64 signature; /* Signature */ - u32 legacy_state; /* DEPRECATED - being replaced by */ - /* / SrvState, CliStateBoot, and CliStateOS below */ - u32 header_size; /* sizeof(struct channel_header) */ - u64 size; /* Total size of this channel in bytes */ - u64 features; /* Flags to modify behavior */ - uuid_le chtype; /* Channel type: data, bus, control, etc. */ - u64 partition_handle; /* ID of guest partition */ - u64 handle; /* Device number of this channel in client */ - u64 ch_space_offset; /* Offset in bytes to channel specific area */ - u32 version_id; /* struct channel_header Version ID */ - u32 partition_index; /* Index of guest partition */ - uuid_le zone_uuid; /* Guid of Channel's zone */ - u32 cli_str_offset; /* offset from channel header to - * nul-terminated ClientString (0 if - * ClientString not present) */ - u32 cli_state_boot; /* CHANNEL_CLIENTSTATE of pre-boot - * EFI client of this channel */ - u32 cmd_state_cli; /* CHANNEL_COMMANDSTATE (overloaded in - * Windows drivers, see ServerStateUp, - * ServerStateDown, etc) */ - u32 cli_state_os; /* CHANNEL_CLIENTSTATE of Guest OS - * client of this channel */ - u32 ch_characteristic; /* CHANNEL_CHARACTERISTIC_<xxx> */ - u32 cmd_state_srv; /* CHANNEL_COMMANDSTATE (overloaded in - * Windows drivers, see ServerStateUp, - * ServerStateDown, etc) */ - u32 srv_state; /* CHANNEL_SERVERSTATE */ - u8 cli_error_boot; /* bits to indicate err states for - * boot clients, so err messages can - * be throttled */ - u8 cli_error_os; /* bits to indicate err states for OS - * clients, so err messages can be - * throttled */ - u8 filler[1]; /* Pad out to 128 byte cacheline */ - /* Please add all new single-byte values below here */ - u8 recover_channel; -}; - -#define ULTRA_CHANNEL_ENABLE_INTS (0x1ULL << 0) - -/* Subheader for the Signal Type variation of the Common Channel */ -struct signal_queue_header { - /* 1st cache line */ - u32 version; /* SIGNAL_QUEUE_HEADER Version ID */ - u32 chtype; /* Queue type: storage, network */ - u64 size; /* Total size of this queue in bytes */ - u64 sig_base_offset; /* Offset to signal queue area */ - u64 features; /* Flags to modify behavior */ - u64 num_sent; /* Total # of signals placed in this queue */ - u64 num_overflows; /* Total # of inserts failed due to - * full queue */ - u32 signal_size; /* Total size of a signal for this queue */ - u32 max_slots; /* Max # of slots in queue, 1 slot is - * always empty */ - u32 max_signals; /* Max # of signals in queue - * (MaxSignalSlots-1) */ - u32 head; /* Queue head signal # */ - /* 2nd cache line */ - u64 num_received; /* Total # of signals removed from this queue */ - u32 tail; /* Queue tail signal # (on separate - * cache line) */ - u32 reserved1; /* Reserved field */ - u64 reserved2; /* Reserved field */ - u64 client_queue; - u64 num_irq_received; /* Total # of Interrupts received. This - * is incremented by the ISR in the - * guest windows driver */ - u64 num_empty; /* Number of times that visor_signal_remove - * is called and returned Empty - * Status. */ - u32 errorflags; /* Error bits set during SignalReinit - * to denote trouble with client's - * fields */ - u8 filler[12]; /* Pad out to 64 byte cacheline */ -}; - -#pragma pack(pop) - -#define spar_signal_init(chan, QHDRFLD, QDATAFLD, QDATATYPE, ver, typ) \ - do { \ - memset(&chan->QHDRFLD, 0, sizeof(chan->QHDRFLD)); \ - chan->QHDRFLD.version = ver; \ - chan->QHDRFLD.chtype = typ; \ - chan->QHDRFLD.size = sizeof(chan->QDATAFLD); \ - chan->QHDRFLD.signal_size = sizeof(QDATATYPE); \ - chan->QHDRFLD.sig_base_offset = (u64)(chan->QDATAFLD)- \ - (u64)(&chan->QHDRFLD); \ - chan->QHDRFLD.max_slots = \ - sizeof(chan->QDATAFLD)/sizeof(QDATATYPE); \ - chan->QHDRFLD.max_signals = chan->QHDRFLD.max_slots-1; \ - } while (0) - -/* Generic function useful for validating any type of channel when it is - * received by the client that will be accessing the channel. - * Note that <logCtx> is only needed for callers in the EFI environment, and - * is used to pass the EFI_DIAG_CAPTURE_PROTOCOL needed to log messages. - */ -static inline int -spar_check_channel_client(void __iomem *ch, - uuid_le expected_uuid, - char *chname, - u64 expected_min_bytes, - u32 expected_version, - u64 expected_signature) -{ - if (uuid_le_cmp(expected_uuid, NULL_UUID_LE) != 0) { - uuid_le guid; - - memcpy_fromio(&guid, - &((struct channel_header __iomem *)(ch))->chtype, - sizeof(guid)); - /* caller wants us to verify type GUID */ - if (uuid_le_cmp(guid, expected_uuid) != 0) { - pr_err("Channel mismatch on channel=%s(%pUL) field=type expected=%pUL actual=%pUL\n", - chname, &expected_uuid, - &expected_uuid, &guid); - return 0; - } - } - if (expected_min_bytes > 0) { /* caller wants us to verify - * channel size */ - unsigned long long bytes = - readq(&((struct channel_header __iomem *) - (ch))->size); - if (bytes < expected_min_bytes) { - pr_err("Channel mismatch on channel=%s(%pUL) field=size expected=0x%-8.8Lx actual=0x%-8.8Lx\n", - chname, &expected_uuid, - (unsigned long long)expected_min_bytes, bytes); - return 0; - } - } - if (expected_version > 0) { /* caller wants us to verify - * channel version */ - unsigned long ver = readl(&((struct channel_header __iomem *) - (ch))->version_id); - if (ver != expected_version) { - pr_err("Channel mismatch on channel=%s(%pUL) field=version expected=0x%-8.8lx actual=0x%-8.8lx\n", - chname, &expected_uuid, - (unsigned long)expected_version, ver); - return 0; - } - } - if (expected_signature > 0) { /* caller wants us to verify - * channel signature */ - unsigned long long sig = - readq(&((struct channel_header __iomem *) - (ch))->signature); - if (sig != expected_signature) { - pr_err("Channel mismatch on channel=%s(%pUL) field=signature expected=0x%-8.8llx actual=0x%-8.8llx\n", - chname, &expected_uuid, - expected_signature, sig); - return 0; - } - } - return 1; -} - -/* Generic function useful for validating any type of channel when it is about - * to be initialized by the server of the channel. - * Note that <logCtx> is only needed for callers in the EFI environment, and - * is used to pass the EFI_DIAG_CAPTURE_PROTOCOL needed to log messages. - */ -static inline int spar_check_channel_server(uuid_le typeuuid, char *name, - u64 expected_min_bytes, - u64 actual_bytes) -{ - if (expected_min_bytes > 0) /* caller wants us to verify - * channel size */ - if (actual_bytes < expected_min_bytes) { - pr_err("Channel mismatch on channel=%s(%pUL) field=size expected=0x%-8.8llx actual=0x%-8.8llx\n", - name, &typeuuid, expected_min_bytes, - actual_bytes); - return 0; - } - return 1; -} - -/* Given a file pathname <s> (with '/' or '\' separating directory nodes), - * returns a pointer to the beginning of a node within that pathname such - * that the number of nodes from that pointer to the end of the string is - * NOT more than <n>. Note that if the pathname has less than <n> nodes - * in it, the return pointer will be to the beginning of the string. - */ -static inline u8 * -pathname_last_n_nodes(u8 *s, unsigned int n) -{ - u8 *p = s; - unsigned int node_count = 0; - - while (*p != '\0') { - if ((*p == '/') || (*p == '\\')) - node_count++; - p++; - } - if (node_count <= n) - return s; - while (n > 0) { - p--; - if (p == s) - break; /* should never happen, unless someone - * is changing the string while we are - * looking at it!! */ - if ((*p == '/') || (*p == '\\')) - n--; - } - return p + 1; -} - -static inline int -spar_channel_client_acquire_os(void __iomem *ch, u8 *id) -{ - struct channel_header __iomem *hdr = ch; - - if (readl(&hdr->cli_state_os) == CHANNELCLI_DISABLED) { - if ((readb(&hdr->cli_error_os) - & ULTRA_CLIERROROS_THROTTLEMSG_DISABLED) == 0) { - /* we are NOT throttling this message */ - writeb(readb(&hdr->cli_error_os) | - ULTRA_CLIERROROS_THROTTLEMSG_DISABLED, - &hdr->cli_error_os); - /* throttle until acquire successful */ - - pr_info("%s Channel StateTransition INVALID! - acquire failed because OS client DISABLED\n", - id); - } - return 0; - } - if ((readl(&hdr->cli_state_os) != CHANNELCLI_OWNED) && - (readl(&hdr->cli_state_boot) == CHANNELCLI_DISABLED)) { - /* Our competitor is DISABLED, so we can transition to OWNED */ - pr_info("%s Channel StateTransition (%s) %s(%d)-->%s(%d)\n", - id, "cli_state_os", - ULTRA_CHANNELCLI_STRING(readl(&hdr->cli_state_os)), - readl(&hdr->cli_state_os), - ULTRA_CHANNELCLI_STRING(CHANNELCLI_OWNED), - CHANNELCLI_OWNED); - writel(CHANNELCLI_OWNED, &hdr->cli_state_os); - mb(); /* required for channel synch */ - } - if (readl(&hdr->cli_state_os) == CHANNELCLI_OWNED) { - if (readb(&hdr->cli_error_os) != 0) { - /* we are in an error msg throttling state; - * come out of it */ - pr_info("%s Channel OS client acquire now successful\n", - id); - writeb(0, &hdr->cli_error_os); - } - return 1; - } - - /* We have to do it the "hard way". We transition to BUSY, - * and can use the channel iff our competitor has not also - * transitioned to BUSY. */ - if (readl(&hdr->cli_state_os) != CHANNELCLI_ATTACHED) { - if ((readb(&hdr->cli_error_os) - & ULTRA_CLIERROROS_THROTTLEMSG_NOTATTACHED) == 0) { - /* we are NOT throttling this message */ - writeb(readb(&hdr->cli_error_os) | - ULTRA_CLIERROROS_THROTTLEMSG_NOTATTACHED, - &hdr->cli_error_os); - /* throttle until acquire successful */ - pr_info("%s Channel StateTransition INVALID! - acquire failed because OS client NOT ATTACHED (state=%s(%d))\n", - id, ULTRA_CHANNELCLI_STRING( - readl(&hdr->cli_state_os)), - readl(&hdr->cli_state_os)); - } - return 0; - } - writel(CHANNELCLI_BUSY, &hdr->cli_state_os); - mb(); /* required for channel synch */ - if (readl(&hdr->cli_state_boot) == CHANNELCLI_BUSY) { - if ((readb(&hdr->cli_error_os) - & ULTRA_CLIERROROS_THROTTLEMSG_BUSY) == 0) { - /* we are NOT throttling this message */ - writeb(readb(&hdr->cli_error_os) | - ULTRA_CLIERROROS_THROTTLEMSG_BUSY, - &hdr->cli_error_os); - /* throttle until acquire successful */ - pr_info("%s Channel StateTransition failed - host OS acquire failed because boot BUSY\n", - id); - } - /* reset busy */ - writel(CHANNELCLI_ATTACHED, &hdr->cli_state_os); - mb(); /* required for channel synch */ - return 0; - } - if (readb(&hdr->cli_error_os) != 0) { - /* we are in an error msg throttling state; come out of it */ - pr_info("%s Channel OS client acquire now successful\n", id); - writeb(0, &hdr->cli_error_os); - } - return 1; -} - -static inline void -spar_channel_client_release_os(void __iomem *ch, u8 *id) -{ - struct channel_header __iomem *hdr = ch; - - if (readb(&hdr->cli_error_os) != 0) { - /* we are in an error msg throttling state; come out of it */ - pr_info("%s Channel OS client error state cleared\n", id); - writeb(0, &hdr->cli_error_os); - } - if (readl(&hdr->cli_state_os) == CHANNELCLI_OWNED) - return; - if (readl(&hdr->cli_state_os) != CHANNELCLI_BUSY) { - pr_info("%s Channel StateTransition INVALID! - release failed because OS client NOT BUSY (state=%s(%d))\n", - id, ULTRA_CHANNELCLI_STRING( - readl(&hdr->cli_state_os)), - readl(&hdr->cli_state_os)); - /* return; */ - } - writel(CHANNELCLI_ATTACHED, &hdr->cli_state_os); /* release busy */ -} - -/* -* Routine Description: -* Tries to insert the prebuilt signal pointed to by pSignal into the nth -* Queue of the Channel pointed to by pChannel -* -* Parameters: -* pChannel: (IN) points to the IO Channel -* Queue: (IN) nth Queue of the IO Channel -* pSignal: (IN) pointer to the signal -* -* Assumptions: -* - pChannel, Queue and pSignal are valid. -* - If insertion fails due to a full queue, the caller will determine the -* retry policy (e.g. wait & try again, report an error, etc.). -* -* Return value: 1 if the insertion succeeds, 0 if the queue was -* full. -*/ - -unsigned char spar_signal_insert(struct channel_header __iomem *ch, u32 queue, - void *sig); - -/* -* Routine Description: -* Removes one signal from Channel pChannel's nth Queue at the -* time of the call and copies it into the memory pointed to by -* pSignal. -* -* Parameters: -* pChannel: (IN) points to the IO Channel -* Queue: (IN) nth Queue of the IO Channel -* pSignal: (IN) pointer to where the signals are to be copied -* -* Assumptions: -* - pChannel and Queue are valid. -* - pSignal points to a memory area large enough to hold queue's SignalSize -* -* Return value: 1 if the removal succeeds, 0 if the queue was -* empty. -*/ - -unsigned char spar_signal_remove(struct channel_header __iomem *ch, u32 queue, - void *sig); - -/* -* Routine Description: -* Removes all signals present in Channel pChannel's nth Queue at the -* time of the call and copies them into the memory pointed to by -* pSignal. Returns the # of signals copied as the value of the routine. -* -* Parameters: -* pChannel: (IN) points to the IO Channel -* Queue: (IN) nth Queue of the IO Channel -* pSignal: (IN) pointer to where the signals are to be copied -* -* Assumptions: -* - pChannel and Queue are valid. -* - pSignal points to a memory area large enough to hold Queue's MaxSignals -* # of signals, each of which is Queue's SignalSize. -* -* Return value: -* # of signals copied. -*/ -unsigned int spar_signal_remove_all(struct channel_header *ch, u32 queue, - void *sig); - -/* -* Routine Description: -* Determine whether a signal queue is empty. -* -* Parameters: -* pChannel: (IN) points to the IO Channel -* Queue: (IN) nth Queue of the IO Channel -* -* Return value: -* 1 if the signal queue is empty, 0 otherwise. -*/ -unsigned char spar_signalqueue_empty(struct channel_header __iomem *ch, - u32 queue); - -#endif diff --git a/kernel/drivers/staging/unisys/common-spar/include/channels/channel_guid.h b/kernel/drivers/staging/unisys/common-spar/include/channels/channel_guid.h deleted file mode 100644 index 706363fc3..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/channels/channel_guid.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -/* - * CHANNEL Guids - */ - -/* Used in IOChannel - * {414815ed-c58c-11da-95a9-00e08161165f} - */ -#define SPAR_VHBA_CHANNEL_PROTOCOL_UUID \ - UUID_LE(0x414815ed, 0xc58c, 0x11da, \ - 0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f) -static const uuid_le spar_vhba_channel_protocol_uuid = - SPAR_VHBA_CHANNEL_PROTOCOL_UUID; - -/* Used in IOChannel - * {8cd5994d-c58e-11da-95a9-00e08161165f} - */ -#define SPAR_VNIC_CHANNEL_PROTOCOL_UUID \ - UUID_LE(0x8cd5994d, 0xc58e, 0x11da, \ - 0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f) -static const uuid_le spar_vnic_channel_protocol_uuid = - SPAR_VNIC_CHANNEL_PROTOCOL_UUID; - -/* Used in IOChannel - * {72120008-4AAB-11DC-8530-444553544200} - */ -#define SPAR_SIOVM_UUID \ - UUID_LE(0x72120008, 0x4AAB, 0x11DC, \ - 0x85, 0x30, 0x44, 0x45, 0x53, 0x54, 0x42, 0x00) -static const uuid_le spar_siovm_uuid = SPAR_SIOVM_UUID; - -/* Used in visornoop/visornoop_main.c - * {5b52c5ac-e5f5-4d42-8dff-429eaecd221f} - */ -#define SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID \ - UUID_LE(0x5b52c5ac, 0xe5f5, 0x4d42, \ - 0x8d, 0xff, 0x42, 0x9e, 0xae, 0xcd, 0x22, 0x1f) - -static const uuid_le spar_controldirector_channel_protocol_uuid = - SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID; - -/* Used in visorchipset/visorchipset_main.c - * {B4E79625-AEDE-4EAA-9E11-D3EDDCD4504C} - */ -#define SPAR_DIAG_POOL_CHANNEL_PROTOCOL_UUID \ - UUID_LE(0xb4e79625, 0xaede, 0x4eaa, \ - 0x9e, 0x11, 0xd3, 0xed, 0xdc, 0xd4, 0x50, 0x4c) diff --git a/kernel/drivers/staging/unisys/common-spar/include/channels/controlframework.h b/kernel/drivers/staging/unisys/common-spar/include/channels/controlframework.h deleted file mode 100644 index 33d9caf33..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/channels/controlframework.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -/* - * Module Name: - * controlframework.h - * - * Abstract: This file defines common structures in the unmanaged - * Ultravisor (mostly EFI) space. - * - */ - -#ifndef _CONTROL_FRAMEWORK_H_ -#define _CONTROL_FRAMEWORK_H_ - -#include <linux/types.h> -#include "channel.h" - -struct spar_segment_state { - u16 enabled:1; /* Bit 0: May enter other states */ - u16 active:1; /* Bit 1: Assigned to active partition */ - u16 alive:1; /* Bit 2: Configure message sent to - * service/server */ - u16 revoked:1; /* Bit 3: similar to partition state - * ShuttingDown */ - u16 allocated:1; /* Bit 4: memory (device/port number) - * has been selected by Command */ - u16 known:1; /* Bit 5: has been introduced to the - * service/guest partition */ - u16 ready:1; /* Bit 6: service/Guest partition has - * responded to introduction */ - u16 operating:1; /* Bit 7: resource is configured and - * operating */ - /* Note: don't use high bit unless we need to switch to ushort - * which is non-compliant */ -}; - -static const struct spar_segment_state segment_state_running = { - 1, 1, 1, 0, 1, 1, 1, 1 -}; - -static const struct spar_segment_state segment_state_paused = { - 1, 1, 1, 0, 1, 1, 1, 0 -}; - -static const struct spar_segment_state segment_state_standby = { - 1, 1, 0, 0, 1, 1, 1, 0 -}; - -#endif /* _CONTROL_FRAMEWORK_H_ not defined */ diff --git a/kernel/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h b/kernel/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h deleted file mode 100644 index a66db7968..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/channels/controlvmchannel.h +++ /dev/null @@ -1,511 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -#ifndef __CONTROLVMCHANNEL_H__ -#define __CONTROLVMCHANNEL_H__ - -#include <linux/uuid.h> -#include "channel.h" -#include "controlframework.h" - -typedef u64 GUEST_PHYSICAL_ADDRESS; - -enum { INVALID_GUEST_FIRMWARE, SAMPLE_GUEST_FIRMWARE, - TIANO32_GUEST_FIRMWARE, TIANO64_GUEST_FIRMWARE -}; - -/* {2B3C2D10-7EF5-4ad8-B966-3448B7386B3D} */ -#define SPAR_CONTROLVM_CHANNEL_PROTOCOL_UUID \ - UUID_LE(0x2b3c2d10, 0x7ef5, 0x4ad8, \ - 0xb9, 0x66, 0x34, 0x48, 0xb7, 0x38, 0x6b, 0x3d) - -static const uuid_le spar_controlvm_channel_protocol_uuid = - SPAR_CONTROLVM_CHANNEL_PROTOCOL_UUID; - -#define ULTRA_CONTROLVM_CHANNEL_PROTOCOL_SIGNATURE \ - ULTRA_CHANNEL_PROTOCOL_SIGNATURE -#define CONTROLVM_MESSAGE_MAX 64 - -/* Must increment this whenever you insert or delete fields within -* this channel struct. Also increment whenever you change the meaning -* of fields within this channel struct so as to break pre-existing -* software. Note that you can usually add fields to the END of the -* channel struct withOUT needing to increment this. */ -#define ULTRA_CONTROLVM_CHANNEL_PROTOCOL_VERSIONID 1 - -#define SPAR_CONTROLVM_CHANNEL_OK_CLIENT(ch) \ - spar_check_channel_client(ch, \ - spar_controlvm_channel_protocol_uuid, \ - "controlvm", \ - sizeof(struct spar_controlvm_channel_protocol), \ - ULTRA_CONTROLVM_CHANNEL_PROTOCOL_VERSIONID, \ - ULTRA_CONTROLVM_CHANNEL_PROTOCOL_SIGNATURE) - -#define MY_DEVICE_INDEX 0 -#define MAX_MACDATA_LEN 8 /* number of bytes for MAC address in config packet */ -#define MAX_SERIAL_NUM 32 - -#define DISK_ZERO_PUN_NUMBER 1 /* Target ID on the SCSI bus for LUN 0 */ -#define DISK_ZERO_LUN_NUMBER 3 /* Logical Unit Number */ - -/* Defines for various channel queues... */ -#define CONTROLVM_QUEUE_REQUEST 0 -#define CONTROLVM_QUEUE_RESPONSE 1 -#define CONTROLVM_QUEUE_EVENT 2 -#define CONTROLVM_QUEUE_ACK 3 - -/* Max number of messages stored during IOVM creation to be reused - * after crash */ -#define CONTROLVM_CRASHMSG_MAX 2 - -/** Ids for commands that may appear in either queue of a ControlVm channel. - * - * Commands that are initiated by the command partition (CP), by an IO or - * console service partition (SP), or by a guest partition (GP)are: - * - issued on the RequestQueue queue (q #0) in the ControlVm channel - * - responded to on the ResponseQueue queue (q #1) in the ControlVm channel - * - * Events that are initiated by an IO or console service partition (SP) or - * by a guest partition (GP) are: - * - issued on the EventQueue queue (q #2) in the ControlVm channel - * - responded to on the EventAckQueue queue (q #3) in the ControlVm channel - */ -enum controlvm_id { - CONTROLVM_INVALID = 0, - /* SWITCH commands required Parameter: SwitchNumber */ - /* BUS commands required Parameter: BusNumber */ - CONTROLVM_BUS_CREATE = 0x101, /* CP --> SP, GP */ - CONTROLVM_BUS_DESTROY = 0x102, /* CP --> SP, GP */ - CONTROLVM_BUS_CONFIGURE = 0x104, /* CP --> SP */ - CONTROLVM_BUS_CHANGESTATE = 0x105, /* CP --> SP, GP */ - CONTROLVM_BUS_CHANGESTATE_EVENT = 0x106, /* SP, GP --> CP */ -/* DEVICE commands required Parameter: BusNumber, DeviceNumber */ - - CONTROLVM_DEVICE_CREATE = 0x201, /* CP --> SP, GP */ - CONTROLVM_DEVICE_DESTROY = 0x202, /* CP --> SP, GP */ - CONTROLVM_DEVICE_CONFIGURE = 0x203, /* CP --> SP */ - CONTROLVM_DEVICE_CHANGESTATE = 0x204, /* CP --> SP, GP */ - CONTROLVM_DEVICE_CHANGESTATE_EVENT = 0x205, /* SP, GP --> CP */ - CONTROLVM_DEVICE_RECONFIGURE = 0x206, /* CP --> Boot */ -/* DISK commands required Parameter: BusNumber, DeviceNumber */ - CONTROLVM_DISK_CREATE = 0x221, /* CP --> SP */ - CONTROLVM_DISK_DESTROY = 0x222, /* CP --> SP */ - CONTROLVM_DISK_CONFIGURE = 0x223, /* CP --> SP */ - CONTROLVM_DISK_CHANGESTATE = 0x224, /* CP --> SP */ -/* CHIPSET commands */ - CONTROLVM_CHIPSET_INIT = 0x301, /* CP --> SP, GP */ - CONTROLVM_CHIPSET_STOP = 0x302, /* CP --> SP, GP */ - CONTROLVM_CHIPSET_SHUTDOWN = 0x303, /* CP --> SP */ - CONTROLVM_CHIPSET_READY = 0x304, /* CP --> SP */ - CONTROLVM_CHIPSET_SELFTEST = 0x305, /* CP --> SP */ - -}; - -struct irq_info { - /**< specifies interrupt info. It is used to send interrupts - * for this channel. The peer at the end of this channel - * who has registered an interrupt (using recv fields - * above) will receive the interrupt. Passed as a parameter - * to Issue_VMCALL_IO_QUEUE_TRANSITION, which generates the - * interrupt. Currently this is used by IOPart-SP to wake - * up GP when Data Channel transitions from empty to - * non-empty.*/ - u64 send_irq_handle; - - /**< specifies interrupt handle. It is used to retrieve the - * corresponding interrupt pin from Monitor; and the - * interrupt pin is used to connect to the corresponding - * interrupt. Used by IOPart-GP only. */ - u64 recv_irq_handle; - - /**< specifies interrupt vector. It, interrupt pin, and shared are - * used to connect to the corresponding interrupt. Used by - * IOPart-GP only. */ - u32 recv_irq_vector; - - /**< specifies if the recvInterrupt is shared. It, interrupt pin - * and vector are used to connect to 0 = not shared; 1 = shared. - * the corresponding interrupt. Used by IOPart-GP only. */ - u8 recv_irq_shared; - u8 reserved[3]; /* Natural alignment purposes */ -}; - -struct pci_id { - u16 domain; - u8 bus; - u8 slot; - u8 func; - u8 reserved[3]; /* Natural alignment purposes */ -}; - -struct efi_spar_indication { - u64 boot_to_fw_ui:1; /* Bit 0: Stop in uefi ui */ - u64 clear_nvram:1; /* Bit 1: Clear NVRAM */ - u64 clear_cmos:1; /* Bit 2: Clear CMOS */ - u64 boot_to_tool:1; /* Bit 3: Run install tool */ - /* remaining bits are available */ -}; - -enum ultra_chipset_feature { - ULTRA_CHIPSET_FEATURE_REPLY = 0x00000001, - ULTRA_CHIPSET_FEATURE_PARA_HOTPLUG = 0x00000002, - ULTRA_CHIPSET_FEATURE_PCIVBUS = 0x00000004 -}; - -/** This is the common structure that is at the beginning of every - * ControlVm message (both commands and responses) in any ControlVm - * queue. Commands are easily distinguished from responses by - * looking at the flags.response field. - */ -struct controlvm_message_header { - u32 id; /* See CONTROLVM_ID. */ - /* For requests, indicates the message type. */ - /* For responses, indicates the type of message we are responding to. */ - - u32 message_size; /* Includes size of this struct + size - * of message */ - u32 segment_index; /* Index of segment containing Vm - * message/information */ - u32 completion_status; /* Error status code or result of - * message completion */ - struct { - u32 failed:1; /**< =1 in a response to * signify - * failure */ - u32 response_expected:1; /**< =1 in all messages that expect a - * response (Control ignores this - * bit) */ - u32 server:1; /**< =1 in all bus & device-related - * messages where the message - * receiver is to act as the bus or - * device server */ - u32 test_message:1; /**< =1 for testing use only - * (Control and Command ignore this - * bit) */ - u32 partial_completion:1; /**< =1 if there are forthcoming - * responses/acks associated - * with this message */ - u32 preserve:1; /**< =1 this is to let us know to - * preserve channel contents - * (for running guests)*/ - u32 writer_in_diag:1; /**< =1 the DiagWriter is active in the - * Diagnostic Partition*/ - } flags; - u32 reserved; /* Natural alignment */ - u64 message_handle; /* Identifies the particular message instance, - * and is used to match particular */ - /* request instances with the corresponding response instance. */ - u64 payload_vm_offset; /* Offset of payload area from start of this - * instance of ControlVm segment */ - u32 payload_max_bytes; /* Maximum bytes allocated in payload - * area of ControlVm segment */ - u32 payload_bytes; /* Actual number of bytes of payload - * area to copy between IO/Command; */ - /* if non-zero, there is a payload to copy. */ -}; - -struct controlvm_packet_device_create { - u32 bus_no; /* bus # (0..n-1) from the msg receiver's end */ - u32 dev_no; /* bus-relative (0..n-1) device number */ - u64 channel_addr; /* Guest physical address of the channel, which - * can be dereferenced by the receiver of this - * ControlVm command */ - u64 channel_bytes; /* specifies size of the channel in bytes */ - uuid_le data_type_uuid; /* specifies format of data in channel */ - uuid_le dev_inst_uuid; /* instance guid for the device */ - struct irq_info intr; /* specifies interrupt information */ -}; /* for CONTROLVM_DEVICE_CREATE */ - -struct controlvm_packet_device_configure { - u32 bus_no; /**< bus # (0..n-1) from the msg - * receiver's perspective */ - - /* Control uses header SegmentIndex field to access bus number... */ - u32 dev_no; /**< bus-relative (0..n-1) device number */ -} ; /* for CONTROLVM_DEVICE_CONFIGURE */ - -struct controlvm_message_device_create { - struct controlvm_message_header header; - struct controlvm_packet_device_create packet; -}; /* total 128 bytes */ - -struct controlvm_message_device_configure { - struct controlvm_message_header header; - struct controlvm_packet_device_configure packet; -}; /* total 56 bytes */ - -/* This is the format for a message in any ControlVm queue. */ -struct controlvm_message_packet { - union { - struct { - u32 bus_no; /* bus # (0..n-1) from the msg - * receiver's perspective */ - u32 dev_count; /* indicates the max number of - * devices on this bus */ - u64 channel_addr; /* Guest physical address of - * the channel, which can be - * dereferenced by the receiver - * of this ControlVm command */ - u64 channel_bytes; /* size of the channel */ - uuid_le bus_data_type_uuid; /* indicates format of - * data in bus channel*/ - uuid_le bus_inst_uuid; /* instance uuid for the bus */ - } create_bus; /* for CONTROLVM_BUS_CREATE */ - struct { - u32 bus_no; /* bus # (0..n-1) from the msg - * receiver's perspective */ - u32 reserved; /* Natural alignment purposes */ - } destroy_bus; /* for CONTROLVM_BUS_DESTROY */ - struct { - u32 bus_no; /* bus # (0..n-1) from the receiver's - * perspective */ - u32 reserved1; /* for alignment purposes */ - u64 guest_handle; /* This is used to convert - * guest physical address to - * physical address */ - u64 recv_bus_irq_handle; - /* specifies interrupt info. It is used by SP - * to register to receive interrupts from the - * CP. This interrupt is used for bus level - * notifications. The corresponding - * sendBusInterruptHandle is kept in CP. */ - } configure_bus; /* for CONTROLVM_BUS_CONFIGURE */ - /* for CONTROLVM_DEVICE_CREATE */ - struct controlvm_packet_device_create create_device; - struct { - u32 bus_no; /* bus # (0..n-1) from the msg - * receiver's perspective */ - u32 dev_no; /* bus-relative (0..n-1) device # */ - } destroy_device; /* for CONTROLVM_DEVICE_DESTROY */ - /* for CONTROLVM_DEVICE_CONFIGURE */ - struct controlvm_packet_device_configure configure_device; - struct { - u32 bus_no; /* bus # (0..n-1) from the msg - * receiver's perspective */ - u32 dev_no; /* bus-relative (0..n-1) device # */ - } reconfigure_device; /* for CONTROLVM_DEVICE_RECONFIGURE */ - struct { - u32 bus_no; - struct spar_segment_state state; - u8 reserved[2]; /* Natural alignment purposes */ - } bus_change_state; /* for CONTROLVM_BUS_CHANGESTATE */ - struct { - u32 bus_no; - u32 dev_no; - struct spar_segment_state state; - struct { - u32 phys_device:1; /* =1 if message is for - * a physical device */ - } flags; - u8 reserved[2]; /* Natural alignment purposes */ - } device_change_state; /* for CONTROLVM_DEVICE_CHANGESTATE */ - struct { - u32 bus_no; - u32 dev_no; - struct spar_segment_state state; - u8 reserved[6]; /* Natural alignment purposes */ - } device_change_state_event; - /* for CONTROLVM_DEVICE_CHANGESTATE_EVENT */ - struct { - u32 bus_count; /* indicates the max number of busses */ - u32 switch_count; /* indicates the max number of - * switches if a service partition */ - enum ultra_chipset_feature features; - u32 platform_number; /* Platform Number */ - } init_chipset; /* for CONTROLVM_CHIPSET_INIT */ - struct { - u32 options; /* reserved */ - u32 test; /* bit 0 set to run embedded selftest */ - } chipset_selftest; /* for CONTROLVM_CHIPSET_SELFTEST */ - u64 addr; /* a physical address of something, that can be - * dereferenced by the receiver of this - * ControlVm command (depends on command id) */ - u64 handle; /* a handle of something (depends on command - * id) */ - }; -}; - -/* All messages in any ControlVm queue have this layout. */ -struct controlvm_message { - struct controlvm_message_header hdr; - struct controlvm_message_packet cmd; -}; - -struct device_map { - GUEST_PHYSICAL_ADDRESS device_channel_address; - u64 device_channel_size; - u32 ca_index; - u32 reserved; /* natural alignment */ - u64 reserved2; /* Align structure on 32-byte boundary */ -}; - -struct guest_devices { - struct device_map video_channel; - struct device_map keyboard_channel; - struct device_map network_channel; - struct device_map storage_channel; - struct device_map console_channel; - u32 partition_index; - u32 pad; -}; - -struct spar_controlvm_channel_protocol { - struct channel_header header; - GUEST_PHYSICAL_ADDRESS gp_controlvm; /* guest physical address of - * this channel */ - GUEST_PHYSICAL_ADDRESS gp_partition_tables;/* guest physical address of - * partition tables */ - GUEST_PHYSICAL_ADDRESS gp_diag_guest; /* guest physical address of - * diagnostic channel */ - GUEST_PHYSICAL_ADDRESS gp_boot_romdisk;/* guest phys addr of (read - * only) Boot ROM disk */ - GUEST_PHYSICAL_ADDRESS gp_boot_ramdisk;/* guest phys addr of writable - * Boot RAM disk */ - GUEST_PHYSICAL_ADDRESS gp_acpi_table; /* guest phys addr of acpi - * table */ - GUEST_PHYSICAL_ADDRESS gp_control_channel;/* guest phys addr of control - * channel */ - GUEST_PHYSICAL_ADDRESS gp_diag_romdisk;/* guest phys addr of diagnostic - * ROM disk */ - GUEST_PHYSICAL_ADDRESS gp_nvram; /* guest phys addr of NVRAM - * channel */ - u64 request_payload_offset; /* Offset to request payload area */ - u64 event_payload_offset; /* Offset to event payload area */ - u32 request_payload_bytes; /* Bytes available in request payload - * area */ - u32 event_payload_bytes;/* Bytes available in event payload area */ - u32 control_channel_bytes; - u32 nvram_channel_bytes; /* Bytes in PartitionNvram segment */ - u32 message_bytes; /* sizeof(CONTROLVM_MESSAGE) */ - u32 message_count; /* CONTROLVM_MESSAGE_MAX */ - GUEST_PHYSICAL_ADDRESS gp_smbios_table;/* guest phys addr of SMBIOS - * tables */ - GUEST_PHYSICAL_ADDRESS gp_physical_smbios_table;/* guest phys addr of - * SMBIOS table */ - /* ULTRA_MAX_GUESTS_PER_SERVICE */ - struct guest_devices gp_obsolete_guest_devices[16]; - - /* guest physical address of EFI firmware image base */ - GUEST_PHYSICAL_ADDRESS virtual_guest_firmware_image_base; - - /* guest physical address of EFI firmware entry point */ - GUEST_PHYSICAL_ADDRESS virtual_guest_firmware_entry_point; - - /* guest EFI firmware image size */ - u64 virtual_guest_firmware_image_size; - - /* GPA = 1MB where EFI firmware image is copied to */ - GUEST_PHYSICAL_ADDRESS virtual_guest_firmware_boot_base; - GUEST_PHYSICAL_ADDRESS virtual_guest_image_base; - GUEST_PHYSICAL_ADDRESS virtual_guest_image_size; - u64 prototype_control_channel_offset; - GUEST_PHYSICAL_ADDRESS virtual_guest_partition_handle; - - u16 restore_action; /* Restore Action field to restore the guest - * partition */ - u16 dump_action; /* For Windows guests it shows if the visordisk - * is running in dump mode */ - u16 nvram_fail_count; - u16 saved_crash_message_count; /* = CONTROLVM_CRASHMSG_MAX */ - u32 saved_crash_message_offset; /* Offset to request payload area needed - * for crash dump */ - u32 installation_error; /* Type of error encountered during - * installation */ - u32 installation_text_id; /* Id of string to display */ - u16 installation_remaining_steps;/* Number of remaining installation - * steps (for progress bars) */ - u8 tool_action; /* ULTRA_TOOL_ACTIONS Installation Action - * field */ - u8 reserved; /* alignment */ - struct efi_spar_indication efi_spar_ind; - struct efi_spar_indication efi_spar_ind_supported; - u32 sp_reserved; - u8 reserved2[28]; /* Force signals to begin on 128-byte cache - * line */ - struct signal_queue_header request_queue;/* Service or guest partition - * uses this queue to send - * requests to Control */ - struct signal_queue_header response_queue;/* Control uses this queue to - * respond to service or guest - * partition requests */ - struct signal_queue_header event_queue; /* Control uses this queue to - * send events to service or - * guest partition */ - struct signal_queue_header event_ack_queue;/* Service or guest partition - * uses this queue to ack - * Control events */ - - /* Request fixed-size message pool - does not include payload */ - struct controlvm_message request_msg[CONTROLVM_MESSAGE_MAX]; - - /* Response fixed-size message pool - does not include payload */ - struct controlvm_message response_msg[CONTROLVM_MESSAGE_MAX]; - - /* Event fixed-size message pool - does not include payload */ - struct controlvm_message event_msg[CONTROLVM_MESSAGE_MAX]; - - /* Ack fixed-size message pool - does not include payload */ - struct controlvm_message event_ack_msg[CONTROLVM_MESSAGE_MAX]; - - /* Message stored during IOVM creation to be reused after crash */ - struct controlvm_message saved_crash_msg[CONTROLVM_CRASHMSG_MAX]; -}; - -/* Offsets for VM channel attributes... */ -#define VM_CH_REQ_QUEUE_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, request_queue) -#define VM_CH_RESP_QUEUE_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, response_queue) -#define VM_CH_EVENT_QUEUE_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, event_queue) -#define VM_CH_ACK_QUEUE_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, event_ack_queue) -#define VM_CH_REQ_MSG_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, request_msg) -#define VM_CH_RESP_MSG_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, response_msg) -#define VM_CH_EVENT_MSG_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, event_msg) -#define VM_CH_ACK_MSG_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, event_ack_msg) -#define VM_CH_CRASH_MSG_OFFSET \ - offsetof(struct spar_controlvm_channel_protocol, saved_crash_msg) - -/* The following header will be located at the beginning of PayloadVmOffset for - * various ControlVm commands. The receiver of a ControlVm command with a - * PayloadVmOffset will dereference this address and then use connection_offset, - * initiator_offset, and target_offset to get the location of UTF-8 formatted - * strings that can be parsed to obtain command-specific information. The value - * of total_length should equal PayloadBytes. The format of the strings at - * PayloadVmOffset will take different forms depending on the message. - */ -struct spar_controlvm_parameters_header { - u32 total_length; - u32 header_length; - u32 connection_offset; - u32 connection_length; - u32 initiator_offset; - u32 initiator_length; - u32 target_offset; - u32 target_length; - u32 client_offset; - u32 client_length; - u32 name_offset; - u32 name_length; - uuid_le id; - u32 revision; - u32 reserved; /* Natural alignment */ -}; - -#endif /* __CONTROLVMCHANNEL_H__ */ diff --git a/kernel/drivers/staging/unisys/common-spar/include/channels/diagchannel.h b/kernel/drivers/staging/unisys/common-spar/include/channels/diagchannel.h deleted file mode 100644 index e8fb8678a..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/channels/diagchannel.h +++ /dev/null @@ -1,427 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -/*++ - * - * Module Name: - * - * diagchannel.h - * - * Abstract: - * - * This file defines the DiagChannel protocol. This protocol is used to aid in - * preserving event data sent by external applications. This protocol provides - * a region for event data to reside in. This data will eventually be sent to - * the Boot Partition where it will be committed to memory and/or disk. This - * file contains platform-independent data that can be built using any - * Supervisor build environment (Windows, Linux, EFI). - * -*/ - -#ifndef _DIAG_CHANNEL_H_ -#define _DIAG_CHANNEL_H_ - -#include <linux/uuid.h> -#include "channel.h" - -/* {EEA7A573-DB82-447c-8716-EFBEAAAE4858} */ -#define SPAR_DIAG_CHANNEL_PROTOCOL_UUID \ - UUID_LE(0xeea7a573, 0xdb82, 0x447c, \ - 0x87, 0x16, 0xef, 0xbe, 0xaa, 0xae, 0x48, 0x58) - -static const uuid_le spar_diag_channel_protocol_uuid = - SPAR_DIAG_CHANNEL_PROTOCOL_UUID; - -/* {E850F968-3263-4484-8CA5-2A35D087A5A8} */ -#define ULTRA_DIAG_ROOT_CHANNEL_PROTOCOL_GUID \ - UUID_LE(0xe850f968, 0x3263, 0x4484, \ - 0x8c, 0xa5, 0x2a, 0x35, 0xd0, 0x87, 0xa5, 0xa8) - -#define ULTRA_DIAG_CHANNEL_PROTOCOL_SIGNATURE ULTRA_CHANNEL_PROTOCOL_SIGNATURE - -/* Must increment this whenever you insert or delete fields within this channel -* struct. Also increment whenever you change the meaning of fields within this -* channel struct so as to break pre-existing software. Note that you can -* usually add fields to the END of the channel struct withOUT needing to -* increment this. */ -#define ULTRA_DIAG_CHANNEL_PROTOCOL_VERSIONID 2 - -#define SPAR_DIAG_CHANNEL_OK_CLIENT(ch)\ - (spar_check_channel_client(ch,\ - spar_diag_channel_protocol_uuid,\ - "diag",\ - sizeof(struct spar_diag_channel_protocol),\ - ULTRA_DIAG_CHANNEL_PROTOCOL_VERSIONID,\ - ULTRA_DIAG_CHANNEL_PROTOCOL_SIGNATURE)) - -#define SPAR_DIAG_CHANNEL_OK_SERVER(bytes)\ - (spar_check_channel_server(spar_diag_channel_protocol_uuid,\ - "diag",\ - sizeof(struct spar_diag_channel_protocol),\ - bytes)) - -#define MAX_MODULE_NAME_SIZE 128 /* Maximum length of module name... */ -#define MAX_ADDITIONAL_INFO_SIZE 256 /* Maximum length of any additional info - * accompanying event... */ -#define MAX_SUBSYSTEMS 64 /* Maximum number of subsystems allowed in - * DiagChannel... */ -#define LOW_SUBSYSTEMS 32 /* Half of MAX_SUBSYSTEMS to allow 64-bit - * math */ -#define SUBSYSTEM_DEBUG 0 /* Standard subsystem for debug events */ -#define SUBSYSTEM_DEFAULT 1 /* Default subsystem for legacy calls to - * ReportEvent */ - -/* few useful subsystem mask values */ -#define SUBSYSTEM_MASK_DEBUG 0x01 /* Standard subsystem for debug - * events */ -#define SUBSYSTEM_MASK_DEFAULT 0x02 /* Default subsystem for legacy calls to - * ReportEvents */ - -/* Event parameter "Severity" is overloaded with Cause in byte 2 and Severity in - * byte 0, bytes 1 and 3 are reserved */ -#define SEVERITY_MASK 0x0FF /* mask out all but the Severity in byte 0 */ -#define CAUSE_MASK 0x0FF0000 /* mask out all but the cause in byte 2 */ -#define CAUSE_SHIFT_AMT 16 /* shift 2 bytes to place it in byte 2 */ - -/* SubsystemSeverityFilter */ -#define SEVERITY_FILTER_MASK 0x0F /* mask out the Cause half, SeverityFilter is - * in the lower nibble */ -#define CAUSE_FILTER_MASK 0xF0 /* mask out the Severity half, CauseFilter is in - * the upper nibble */ -#define CAUSE_FILTER_SHIFT_AMT 4 /* shift amount to place it in lower or upper - * nibble */ - -/* Copied from EFI's EFI_TIME struct in efidef.h. EFI headers are not allowed -* in some of the Supervisor areas, such as Monitor, so it has been "ported" here -* for use in diagnostic event timestamps... */ -struct diag_efi_time { - u16 year; /* 1998 - 20XX */ - u8 month; /* 1 - 12 */ - u8 day; /* 1 - 31 */ - u8 hour; /* 0 - 23 */ - u8 minute; /* 0 - 59 */ - u8 second; /* 0 - 59 */ - u8 pad1; - u32 nanosecond; /* 0 - 999, 999, 999 */ - s16 timezone; /* -1440 to 1440 or 2047 */ - u8 daylight; - u8 pad2; -}; - -enum spar_component_types { - ULTRA_COMPONENT_GUEST = 0, - ULTRA_COMPONENT_MONITOR = 0x01, - ULTRA_COMPONENT_CCM = 0x02, /* Common Control module */ - /* RESERVED 0x03 - 0x7 */ - - /* Ultravisor Components */ - ULTRA_COMPONENT_BOOT = 0x08, - ULTRA_COMPONENT_IDLE = 0x09, - ULTRA_COMPONENT_CONTROL = 0x0A, - ULTRA_COMPONENT_LOGGER = 0x0B, - ULTRA_COMPONENT_ACPI = 0X0C, - /* RESERVED 0x0D - 0x0F */ - - /* sPAR Components */ - ULTRA_COMPONENT_COMMAND = 0x10, - ULTRA_COMPONENT_IODRIVER = 0x11, - ULTRA_COMPONENT_CONSOLE = 0x12, - ULTRA_COMPONENT_OPERATIONS = 0x13, - ULTRA_COMPONENT_MANAGEMENT = 0x14, - ULTRA_COMPONENT_DIAG = 0x15, - ULTRA_COMPONENT_HWDIAG = 0x16, - ULTRA_COMPONENT_PSERVICES = 0x17, - ULTRA_COMPONENT_PDIAG = 0x18 - /* RESERVED 0x18 - 0x1F */ -}; - -/* Structure: diag_channel_event Purpose: Contains attributes that make up an - * event to be written to the DIAG_CHANNEL memory. Attributes: EventId: Id of - * the diagnostic event to write to memory. Severity: Severity of the event - * (Error, Info, etc). ModuleName: Module/file name where event originated. - * LineNumber: Line number in module name where event originated. Timestamp: - * Date/time when event was received by ReportEvent, and written to DiagChannel. - * Reserved: Padding to align structure on a 64-byte cache line boundary. - * AdditionalInfo: Array of characters for additional event info (may be - * empty). */ -struct diag_channel_event { - u32 event_id; - u32 severity; - u8 module_name[MAX_MODULE_NAME_SIZE]; - u32 line_number; - struct diag_efi_time timestamp; /* Size = 16 bytes */ - u32 partition_number; /* Filled in by Diag Switch as pool blocks are - * filled */ - u16 vcpu_number; - u16 lcpu_number; - u8 component_type; /* ULTRA_COMPONENT_TYPES */ - u8 subsystem; - u16 reserved0; /* pad to u64 alignment */ - u32 block_no; /* filled in by DiagSwitch as pool blocks are - * filled */ - u32 block_no_high; - u32 event_no; /* filled in by DiagSwitch as pool blocks are - * filled */ - u32 event_no_high; - - /* The block_no and event_no fields are set only by DiagSwitch - * and referenced only by WinDiagDisplay formatting tool as - * additional diagnostic information. Other tools including - * WinDiagDisplay currently ignore these 'Reserved' bytes. */ - u8 reserved[8]; - u8 additional_info[MAX_ADDITIONAL_INFO_SIZE]; - - /* NOTE: Changes to diag_channel_event generally need to be reflected in - * existing copies * - * - for AppOS at - * GuestLinux/visordiag_early/supervisor_diagchannel.h * - * - for WinDiagDisplay at - * EFI/Ultra/Tools/WinDiagDisplay/WinDiagDisplay/diagstruct.h */ -}; - -/* Levels of severity for diagnostic events, in order from lowest severity to -* highest (i.e. fatal errors are the most severe, and should always be logged, -* but info events rarely need to be logged except during debugging). The values -* DIAG_SEVERITY_ENUM_BEGIN and DIAG_SEVERITY_ENUM_END are not valid severity -* values. They exist merely to dilineate the list, so that future additions -* won't require changes to the driver (i.e. when checking for out-of-range -* severities in SetSeverity). The values DIAG_SEVERITY_OVERRIDE and -* DIAG_SEVERITY_SHUTOFF are not valid severity values for logging events but -* they are valid for controlling the amount of event data. This enum is also -* defined in DotNet\sParFramework\ControlFramework\ControlFramework.cs. If a -* change is made to this enum, they should also be reflected in that file. */ -enum diag_severity { - DIAG_SEVERITY_ENUM_BEGIN = 0, - DIAG_SEVERITY_OVERRIDE = DIAG_SEVERITY_ENUM_BEGIN, - DIAG_SEVERITY_VERBOSE = DIAG_SEVERITY_OVERRIDE, /* 0 */ - DIAG_SEVERITY_INFO = DIAG_SEVERITY_VERBOSE + 1, /* 1 */ - DIAG_SEVERITY_WARNING = DIAG_SEVERITY_INFO + 1, /* 2 */ - DIAG_SEVERITY_ERR = DIAG_SEVERITY_WARNING + 1, /* 3 */ - DIAG_SEVERITY_PRINT = DIAG_SEVERITY_ERR + 1, /* 4 */ - DIAG_SEVERITY_SHUTOFF = DIAG_SEVERITY_PRINT + 1, /* 5 */ - DIAG_SEVERITY_ENUM_END = DIAG_SEVERITY_SHUTOFF, /* 5 */ - DIAG_SEVERITY_NONFATAL_ERR = DIAG_SEVERITY_ERR, - DIAG_SEVERITY_FATAL_ERR = DIAG_SEVERITY_PRINT -}; - -/* Event Cause enums -* -* Levels of cause for diagnostic events, in order from least to greatest cause -* Internal errors are most urgent since ideally they should never exist -* Invalid requests are preventable by avoiding invalid inputs -* Operations errors depend on environmental factors which may impact which -* requests are possible -* Manifest provides intermediate value to capture firmware and configuration -* version information -* Trace provides suplimental debug information in release firmware -* Unknown Log captures unclasified LogEvent calls. -* Debug is the least urgent since it provides suplimental debug information only -* in debug firmware -* Unknown Debug captures unclassified DebugEvent calls. -* This enum is also defined in -* DotNet\sParFramework\ControlFramework\ControlFramework.cs. -* If a change is made to this enum, they should also be reflected in that -* file. */ - -/* A cause value "DIAG_CAUSE_FILE_XFER" together with a severity value of -* "DIAG_SEVERITY_PRINT" (=4), is used for transferring text or binary file to -* the Diag partition. This cause-severity combination will be used by Logger -* DiagSwitch to segregate events into block types. The files are transferred in -* 256 byte chunks maximum, in the AdditionalInfo field of the diag_channel_event -* structure. In the file transfer mode, some event fields will have different -* meaning: EventId specifies the file offset, severity specifies the block type, -* ModuleName specifies the filename, LineNumber specifies the number of valid -* data bytes in an event and AdditionalInfo contains up to 256 bytes of data. */ - -/* The Diag DiagWriter appends event blocks to events.raw as today, and for data - * blocks uses diag_channel_event - * PartitionNumber to extract and append 'AdditionalInfo' to filename (specified - * by ModuleName). */ - -/* The Dell PDiag uses this new mechanism to stash DSET .zip onto the - * 'diagnostic' virtual disk. */ -enum diag_cause { - DIAG_CAUSE_UNKNOWN = 0, - DIAG_CAUSE_UNKNOWN_DEBUG = DIAG_CAUSE_UNKNOWN + 1, /* 1 */ - DIAG_CAUSE_DEBUG = DIAG_CAUSE_UNKNOWN_DEBUG + 1, /* 2 */ - DIAG_CAUSE_UNKNOWN_LOG = DIAG_CAUSE_DEBUG + 1, /* 3 */ - DIAG_CAUSE_TRACE = DIAG_CAUSE_UNKNOWN_LOG + 1, /* 4 */ - DIAG_CAUSE_MANIFEST = DIAG_CAUSE_TRACE + 1, /* 5 */ - DIAG_CAUSE_OPERATIONS_ERROR = DIAG_CAUSE_MANIFEST + 1, /* 6 */ - DIAG_CAUSE_INVALID_REQUEST = DIAG_CAUSE_OPERATIONS_ERROR + 1, /* 7 */ - DIAG_CAUSE_INTERNAL_ERROR = DIAG_CAUSE_INVALID_REQUEST + 1, /* 8 */ - DIAG_CAUSE_FILE_XFER = DIAG_CAUSE_INTERNAL_ERROR + 1, /* 9 */ - DIAG_CAUSE_ENUM_END = DIAG_CAUSE_FILE_XFER /* 9 */ -}; - -/* Event Cause category defined into the byte 2 of Severity */ -#define CAUSE_DEBUG (DIAG_CAUSE_DEBUG << CAUSE_SHIFT_AMT) -#define CAUSE_TRACE (DIAG_CAUSE_TRACE << CAUSE_SHIFT_AMT) -#define CAUSE_MANIFEST (DIAG_CAUSE_MANIFEST << CAUSE_SHIFT_AMT) -#define CAUSE_OPERATIONS_ERROR (DIAG_CAUSE_OPERATIONS_ERROR << CAUSE_SHIFT_AMT) -#define CAUSE_INVALID_REQUEST (DIAG_CAUSE_INVALID_REQUEST << CAUSE_SHIFT_AMT) -#define CAUSE_INTERNAL_ERROR (DIAG_CAUSE_INTERNAL_ERROR << CAUSE_SHIFT_AMT) -#define CAUSE_FILE_XFER (DIAG_CAUSE_FILE_XFER << CAUSE_SHIFT_AMT) -#define CAUSE_ENUM_END CAUSE_FILE_XFER - -/* Combine Cause and Severity categories into one */ -#define CAUSE_DEBUG_SEVERITY_VERBOSE \ - (CAUSE_DEBUG | DIAG_SEVERITY_VERBOSE) -#define CAUSE_TRACE_SEVERITY_VERBOSE \ - (CAUSE_TRACE | DIAG_SEVERITY_VERBOSE) -#define CAUSE_MANIFEST_SEVERITY_VERBOSE\ - (CAUSE_MANIFEST | DIAG_SEVERITY_VERBOSE) -#define CAUSE_OPERATIONS_SEVERITY_VERBOSE \ - (CAUSE_OPERATIONS_ERROR | DIAG_SEVERITY_VERBOSE) -#define CAUSE_INVALID_SEVERITY_VERBOSE \ - (CAUSE_INVALID_REQUEST | DIAG_SEVERITY_VERBOSE) -#define CAUSE_INTERNAL_SEVERITY_VERBOSE \ - (CAUSE_INTERNAL_ERROR | DIAG_SEVERITY_VERBOSE) - -#define CAUSE_DEBUG_SEVERITY_INFO \ - (CAUSE_DEBUG | DIAG_SEVERITY_INFO) -#define CAUSE_TRACE_SEVERITY_INFO \ - (CAUSE_TRACE | DIAG_SEVERITY_INFO) -#define CAUSE_MANIFEST_SEVERITY_INFO \ - (CAUSE_MANIFEST | DIAG_SEVERITY_INFO) -#define CAUSE_OPERATIONS_SEVERITY_INFO \ - (CAUSE_OPERATIONS_ERROR | DIAG_SEVERITY_INFO) -#define CAUSE_INVALID_SEVERITY_INFO \ - (CAUSE_INVALID_REQUEST | DIAG_SEVERITY_INFO) -#define CAUSE_INTERNAL_SEVERITY_INFO \ - (CAUSE_INTERNAL_ERROR | DIAG_SEVERITY_INFO) - -#define CAUSE_DEBUG_SEVERITY_WARN \ - (CAUSE_DEBUG | DIAG_SEVERITY_WARNING) -#define CAUSE_TRACE_SEVERITY_WARN \ - (CAUSE_TRACE | DIAG_SEVERITY_WARNING) -#define CAUSE_MANIFEST_SEVERITY_WARN \ - (CAUSE_MANIFEST | DIAG_SEVERITY_WARNING) -#define CAUSE_OPERATIONS_SEVERITY_WARN \ - (CAUSE_OPERATIONS_ERROR | DIAG_SEVERITY_WARNING) -#define CAUSE_INVALID_SEVERITY_WARN \ - (CAUSE_INVALID_REQUEST | DIAG_SEVERITY_WARNING) -#define CAUSE_INTERNAL_SEVERITY_WARN \ - (CAUSE_INTERNAL_ERROR | DIAG_SEVERITY_WARNING) - -#define CAUSE_DEBUG_SEVERITY_ERR \ - (CAUSE_DEBUG | DIAG_SEVERITY_ERR) -#define CAUSE_TRACE_SEVERITY_ERR \ - (CAUSE_TRACE | DIAG_SEVERITY_ERR) -#define CAUSE_MANIFEST_SEVERITY_ERR \ - (CAUSE_MANIFEST | DIAG_SEVERITY_ERR) -#define CAUSE_OPERATIONS_SEVERITY_ERR \ - (CAUSE_OPERATIONS_ERROR | DIAG_SEVERITY_ERR) -#define CAUSE_INVALID_SEVERITY_ERR \ - (CAUSE_INVALID_REQUEST | DIAG_SEVERITY_ERR) -#define CAUSE_INTERNAL_SEVERITY_ERR \ - (CAUSE_INTERNAL_ERROR | DIAG_SEVERITY_ERR) - -#define CAUSE_DEBUG_SEVERITY_PRINT \ - (CAUSE_DEBUG | DIAG_SEVERITY_PRINT) -#define CAUSE_TRACE_SEVERITY_PRINT \ - (CAUSE_TRACE | DIAG_SEVERITY_PRINT) -#define CAUSE_MANIFEST_SEVERITY_PRINT \ - (CAUSE_MANIFEST | DIAG_SEVERITY_PRINT) -#define CAUSE_OPERATIONS_SEVERITY_PRINT \ - (CAUSE_OPERATIONS_ERROR | DIAG_SEVERITY_PRINT) -#define CAUSE_INVALID_SEVERITY_PRINT \ - (CAUSE_INVALID_REQUEST | DIAG_SEVERITY_PRINT) -#define CAUSE_INTERNAL_SEVERITY_PRINT \ - (CAUSE_INTERNAL_ERROR | DIAG_SEVERITY_PRINT) -#define CAUSE_FILE_XFER_SEVERITY_PRINT \ - (CAUSE_FILE_XFER | DIAG_SEVERITY_PRINT) - -/* Structure: diag_channel_protocol_header - * - * Purpose: Contains attributes that make up the header specific to the - * DIAG_CHANNEL area. - * - * Attributes: - * - * DiagLock: Diag Channel spinlock. - * - *IsChannelInitialized: 1 iff SignalInit was called for this channel; otherwise - * 0, and assume the channel is not ready for use yet. - * - * Reserved: Padding to align the fields in this structure. - * - *SubsystemSeverityFilter: Level of severity on a subsystem basis that controls - * whether events are logged. Any event's severity for a - * particular subsystem below this level will be discarded. - */ -struct diag_channel_protocol_header { - u32 diag_lock; - u8 channel_initialized; - u8 reserved[3]; - u8 subsystem_severity_filter[64]; -}; - -/* The Diagram for the Diagnostic Channel: */ -/* ----------------------- */ -/* | Channel Header | Defined by ULTRA_CHANNEL_PROTOCOL */ -/* ----------------------- */ -/* | Signal Queue Header | Defined by SIGNAL_QUEUE_HEADER */ -/* ----------------------- */ -/* | DiagChannel Header | Defined by diag_channel_protocol_header */ -/* ----------------------- */ -/* | Channel Event Info | Defined by diag_channel_event*MAX_EVENTS */ -/* ----------------------- */ -/* | Reserved | Reserved (pad out to 4MB) */ -/* ----------------------- */ - -/* Offsets/sizes for diagnostic channel attributes... */ -#define DIAG_CH_QUEUE_HEADER_OFFSET (sizeof(struct channel_header)) -#define DIAG_CH_QUEUE_HEADER_SIZE (sizeof(struct signal_queue_header)) -#define DIAG_CH_PROTOCOL_HEADER_OFFSET \ - (DIAG_CH_QUEUE_HEADER_OFFSET + DIAG_CH_QUEUE_HEADER_SIZE) -#define DIAG_CH_PROTOCOL_HEADER_SIZE \ - (sizeof(struct diag_channel_protocol_header)) -#define DIAG_CH_EVENT_OFFSET \ - (DIAG_CH_PROTOCOL_HEADER_OFFSET + DIAG_CH_PROTOCOL_HEADER_SIZE) -#define DIAG_CH_SIZE (4096 * 1024) - -/* For Control and Idle Partitions with larger (8 MB) diagnostic(root) - * channels */ -#define DIAG_CH_LRG_SIZE (2 * DIAG_CH_SIZE) /* 8 MB */ - -/* - * Structure: spar_diag_channel_protocol - * - * Purpose: Contains attributes that make up the DIAG_CHANNEL memory. - * - * Attributes: - * - * CommonChannelHeader: Header info common to all channels. - * - * QueueHeader: Queue header common to all channels - used to determine where to - * store event. - * - * DiagChannelHeader: Diagnostic channel header info (see - * diag_channel_protocol_header comments). - * - * Events: Area where diagnostic events (up to MAX_EVENTS) are written. - * - *Reserved: Reserved area to allow for correct channel size padding. -*/ -struct spar_diag_channel_protocol { - struct channel_header common_channel_header; - struct signal_queue_header queue_header; - struct diag_channel_protocol_header diag_channel_header; - struct diag_channel_event events[(DIAG_CH_SIZE - DIAG_CH_EVENT_OFFSET) / - sizeof(struct diag_channel_event)]; -}; - -#endif diff --git a/kernel/drivers/staging/unisys/common-spar/include/channels/iochannel.h b/kernel/drivers/staging/unisys/common-spar/include/channels/iochannel.h deleted file mode 100644 index 3bd7579e1..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/channels/iochannel.h +++ /dev/null @@ -1,784 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION */ -/* All rights reserved. */ -#ifndef __IOCHANNEL_H__ -#define __IOCHANNEL_H__ - -/* -* Everything needed for IOPart-GuestPart communication is define in -* this file. Note: Everything is OS-independent because this file is -* used by Windows, Linux and possible EFI drivers. */ - -/* -* Communication flow between the IOPart and GuestPart uses the channel headers -* channel state. The following states are currently being used: -* UNINIT(All Zeroes), CHANNEL_ATTACHING, CHANNEL_ATTACHED, CHANNEL_OPENED -* -* additional states will be used later. No locking is needed to switch between -* states due to the following rules: -* -* 1. IOPart is only the only partition allowed to change from UNIT -* 2. IOPart is only the only partition allowed to change from -* CHANNEL_ATTACHING -* 3. GuestPart is only the only partition allowed to change from -* CHANNEL_ATTACHED -* -* The state changes are the following: IOPart sees the channel is in UNINIT, -* UNINIT -> CHANNEL_ATTACHING (performed only by IOPart) -* CHANNEL_ATTACHING -> CHANNEL_ATTACHED (performed only by IOPart) -* CHANNEL_ATTACHED -> CHANNEL_OPENED (performed only by GuestPart) -*/ - -#include <linux/uuid.h> - -#include "vmcallinterface.h" - -#define _ULTRA_CONTROLVM_CHANNEL_INLINE_ -#include <linux/dma-direction.h> -#include "controlvmchannel.h" -#include "vbuschannel.h" -#undef _ULTRA_CONTROLVM_CHANNEL_INLINE_ -#include "channel.h" - -/* - * CHANNEL Guids - */ - -#include "channel_guid.h" - -#define ULTRA_VHBA_CHANNEL_PROTOCOL_SIGNATURE ULTRA_CHANNEL_PROTOCOL_SIGNATURE -#define ULTRA_VNIC_CHANNEL_PROTOCOL_SIGNATURE ULTRA_CHANNEL_PROTOCOL_SIGNATURE -#define ULTRA_VSWITCH_CHANNEL_PROTOCOL_SIGNATURE \ - ULTRA_CHANNEL_PROTOCOL_SIGNATURE - -/* Must increment these whenever you insert or delete fields within this channel -* struct. Also increment whenever you change the meaning of fields within this -* channel struct so as to break pre-existing software. Note that you can -* usually add fields to the END of the channel struct withOUT needing to -* increment this. */ -#define ULTRA_VHBA_CHANNEL_PROTOCOL_VERSIONID 2 -#define ULTRA_VNIC_CHANNEL_PROTOCOL_VERSIONID 2 -#define ULTRA_VSWITCH_CHANNEL_PROTOCOL_VERSIONID 1 - -#define SPAR_VHBA_CHANNEL_OK_CLIENT(ch) \ - (spar_check_channel_client(ch, spar_vhba_channel_protocol_uuid, \ - "vhba", MIN_IO_CHANNEL_SIZE, \ - ULTRA_VHBA_CHANNEL_PROTOCOL_VERSIONID, \ - ULTRA_VHBA_CHANNEL_PROTOCOL_SIGNATURE)) - -#define SPAR_VNIC_CHANNEL_OK_CLIENT(ch) \ - (spar_check_channel_client(ch, spar_vnic_channel_protocol_uuid, \ - "vnic", MIN_IO_CHANNEL_SIZE, \ - ULTRA_VNIC_CHANNEL_PROTOCOL_VERSIONID, \ - ULTRA_VNIC_CHANNEL_PROTOCOL_SIGNATURE)) - -/* -* Everything necessary to handle SCSI & NIC traffic between Guest Partition and -* IO Partition is defined below. */ - -/* -* Defines and enums. -*/ - -#define MINNUM(a, b) (((a) < (b)) ? (a) : (b)) -#define MAXNUM(a, b) (((a) > (b)) ? (a) : (b)) - -/* these define the two queues per data channel between iopart and - * ioguestparts */ -#define IOCHAN_TO_IOPART 0 /* used by ioguestpart to 'insert' signals to - * iopart */ -#define IOCHAN_FROM_GUESTPART 0 /* used by iopart to 'remove' signals from - * ioguestpart - same queue as previous queue */ - -#define IOCHAN_TO_GUESTPART 1 /* used by iopart to 'insert' signals to - * ioguestpart */ -#define IOCHAN_FROM_IOPART 1 /* used by ioguestpart to 'remove' signals from - * iopart - same queue as previous queue */ - -/* these define the two queues per control channel between controlpart and "its" - * guests, which includes the iopart */ -#define CTRLCHAN_TO_CTRLGUESTPART 0 /* used by ctrlguestpart to 'insert' signals - * to ctrlpart */ -#define CTLRCHAN_FROM_CTRLPART 0 /* used by ctrlpart to 'remove' signals from - * ctrlquestpart - same queue as previous - * queue */ - -#define CTRLCHAN_TO_CTRLPART 1 /* used by ctrlpart to 'insert' signals to - * ctrlguestpart */ -#define CTRLCHAN_FROM_CTRLGUESTPART 1 /* used by ctrguestpart to 'remove' - * signals from ctrlpart - same queue as - * previous queue */ - -/* these define the Event & Ack queues per control channel Events are generated -* by CTRLGUESTPART and sent to CTRLPART; Acks are generated by CTRLPART and sent -* to CTRLGUESTPART. */ -#define CTRLCHAN_EVENT_TO_CTRLPART 2 /* used by ctrlguestpart to 'insert' Events - * to ctrlpart */ -#define CTRLCHAN_EVENT_FROM_CTRLGUESTPART 2 /* used by ctrlpart to 'remove' - * Events from ctrlguestpart */ - -#define CTRLCHAN_ACK_TO_CTRLGUESTPART 3 /* used by ctrlpart to 'insert' Acks to - * ctrlguestpart */ -#define CTRLCHAN_ACK_FROM_CTRLPART 3 /* used by ctrlguestpart to 'remove' Events - * from ctrlpart */ - -/* size of cdb - i.e., scsi cmnd */ -#define MAX_CMND_SIZE 16 - -#define MAX_SENSE_SIZE 64 - -#define MAX_PHYS_INFO 64 - -/* Because GuestToGuestCopy is limited to 4KiB segments, and we have limited the -* Emulex Driver to 256 scatter list segments via the lpfc_sg_seg_cnt parameter -* to 256, the maximum I/O size is limited to 256 * 4 KiB = 1 MB */ -#define MAX_IO_SIZE (1024*1024) /* 1 MB */ - -/* NOTE 1: lpfc defines its support for segments in -* #define LPFC_SG_SEG_CNT 64 -* -* NOTE 2: In Linux, frags array in skb is currently allocated to be -* MAX_SKB_FRAGS size, which is 18 which is smaller than MAX_PHYS_INFO for -* now. */ - -#ifndef MAX_SERIAL_NUM -#define MAX_SERIAL_NUM 32 -#endif /* MAX_SERIAL_NUM */ - -#define MAX_SCSI_BUSES 1 -#define MAX_SCSI_TARGETS 8 -#define MAX_SCSI_LUNS 16 -#define MAX_SCSI_FROM_HOST 0xFFFFFFFF /* Indicator to use Physical HBA - * SCSI Host value */ - -/* various types of network packets that can be sent in cmdrsp */ -enum net_types { - NET_RCV_POST = 0, /* submit buffer to hold receiving - * incoming packet */ - /* virtnic -> uisnic */ - NET_RCV, /* incoming packet received */ - /* uisnic -> virtpci */ - NET_XMIT, /* for outgoing net packets */ - /* virtnic -> uisnic */ - NET_XMIT_DONE, /* outgoing packet xmitted */ - /* uisnic -> virtpci */ - NET_RCV_ENBDIS, /* enable/disable packet reception */ - /* virtnic -> uisnic */ - NET_RCV_ENBDIS_ACK, /* acknowledge enable/disable packet - * reception */ - /* uisnic -> virtnic */ - NET_RCV_PROMISC, /* enable/disable promiscuous mode */ - /* virtnic -> uisnic */ - NET_CONNECT_STATUS, /* indicate the loss or restoration of a network - * connection */ - /* uisnic -> virtnic */ - NET_MACADDR, /* indicates the client has requested to update - * its MAC addr */ - NET_MACADDR_ACK, /* MAC address */ - -}; - -#define ETH_HEADER_SIZE 14 /* size of ethernet header */ - -#define ETH_MIN_DATA_SIZE 46 /* minimum eth data size */ -#define ETH_MIN_PACKET_SIZE (ETH_HEADER_SIZE + ETH_MIN_DATA_SIZE) - -#define ETH_DEF_DATA_SIZE 1500 /* default data size */ -#define ETH_DEF_PACKET_SIZE (ETH_HEADER_SIZE + ETH_DEF_DATA_SIZE) - -#define ETH_MAX_MTU 16384 /* maximum data size */ - -#ifndef MAX_MACADDR_LEN -#define MAX_MACADDR_LEN 6 /* number of bytes in MAC address */ -#endif /* MAX_MACADDR_LEN */ - -#define ETH_IS_LOCALLY_ADMINISTERED(address) \ - (((u8 *)(address))[0] & ((u8)0x02)) -#define NIC_VENDOR_ID 0x0008000B - -/* various types of scsi task mgmt commands */ -enum task_mgmt_types { - TASK_MGMT_ABORT_TASK = 1, - TASK_MGMT_BUS_RESET, - TASK_MGMT_LUN_RESET, - TASK_MGMT_TARGET_RESET, -}; - -/* various types of vdisk mgmt commands */ -enum vdisk_mgmt_types { - VDISK_MGMT_ACQUIRE = 1, - VDISK_MGMT_RELEASE, -}; - -/* this is used in the vdest field */ -#define VDEST_ALL 0xFFFF - -#define MIN_NUMSIGNALS 64 -#define MAX_NUMSIGNALS 4096 - -/* MAX_NET_RCV_BUF specifies the number of rcv buffers that are created by each -* guest's virtnic and posted to uisnic. Uisnic, for each channel, keeps the rcv -* buffers posted and uses them to receive data on behalf of the guest's virtnic. -* NOTE: the num_rcv_bufs is configurable for each VNIC. So the following is -* simply an upperlimit on what each VNIC can provide. Setting it to half of the -* NUMSIGNALS to prevent queue full deadlocks */ -#define MAX_NET_RCV_BUFS (MIN_NUMSIGNALS / 2) - -/* - * structs with pragma pack */ - -/* ///////////// BEGIN PRAGMA PACK PUSH 1 ///////////////////////// */ -/* ///////////// ONLY STRUCT TYPE SHOULD BE BELOW */ - -#pragma pack(push, 1) - -struct guest_phys_info { - u64 address; - u64 length; -}; - -#define GPI_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof(struct guest_phys_info)) - -struct uisscsi_dest { - u32 channel; /* channel == bus number */ - u32 id; /* id == target number */ - u32 lun; /* lun == logical unit number */ -}; - -struct vhba_wwnn { - u32 wwnn1; - u32 wwnn2; -}; - -/* WARNING: Values stired in this structure must contain maximum counts (not - * maximum values). */ -struct vhba_config_max { /* 20 bytes */ - u32 max_channel; /* maximum channel for devices attached to this - * bus */ - u32 max_id; /* maximum SCSI ID for devices attached to this - * bus */ - u32 max_lun; /* maximum SCSI LUN for devices attached to this - * bus */ - u32 cmd_per_lun; /* maximum number of outstanding commands per - * lun that are allowed at one time */ - u32 max_io_size; /* maximum io size for devices attached to this - * bus */ - /* max io size is often determined by the resource of the hba. e.g */ - /* max scatter gather list length * page size / sector size */ -}; - -struct uiscmdrsp_scsi { - void *scsicmd; /* the handle to the cmd that was received - - * send it back as is in the rsp packet. */ - u8 cmnd[MAX_CMND_SIZE]; /* the cdb for the command */ - u32 bufflen; /* length of data to be transferred out or in */ - u16 guest_phys_entries; /* Number of entries in scatter-gather (sg) - * list */ - struct guest_phys_info gpi_list[MAX_PHYS_INFO]; /* physical address - * information for each - * fragment */ - enum dma_data_direction data_dir; /* direction of the data, if any */ - struct uisscsi_dest vdest; /* identifies the virtual hba, id, - * channel, lun to which cmd was sent */ - - /* the following fields are needed to queue the rsp back to cmd - * originator */ - int linuxstat; /* the original Linux status - for use by linux - * vdisk code */ - u8 scsistat; /* the scsi status */ - u8 addlstat; /* non-scsi status - covers cases like timeout - * needed by windows guests */ -#define ADDL_RESET 1 -#define ADDL_TIMEOUT 2 -#define ADDL_INTERNAL_ERROR 3 -#define ADDL_SEL_TIMEOUT 4 -#define ADDL_CMD_TIMEOUT 5 -#define ADDL_BAD_TARGET 6 -#define ADDL_RETRY 7 - - /* the following fields are need to determine the result of command */ - u8 sensebuf[MAX_SENSE_SIZE]; /* sense info in case cmd failed; */ - /* it holds the sense_data struct; */ - /* see that struct for details. */ - void *vdisk; /* contains pointer to the vdisk so that we can clean up - * when the IO completes. */ - int no_disk_result; /* used to return no disk inquiry result */ - /* when no_disk_result is set to 1, */ - /* scsi.scsistat is SAM_STAT_GOOD */ - /* scsi.addlstat is 0 */ - /* scsi.linuxstat is SAM_STAT_GOOD */ - /* That is, there is NO error. */ -}; - -/* -* Defines to support sending correct inquiry result when no disk is -* configured. */ - -/* From SCSI SPC2 - - * - * If the target is not capable of supporting a device on this logical unit, the - * device server shall set this field to 7Fh (PERIPHERAL QUALIFIER set to 011b - * and PERIPHERAL DEVICE TYPE set to 1Fh). - * - *The device server is capable of supporting the specified peripheral device - *type on this logical unit. However, the physical device is not currently - *connected to this logical unit. - */ - -#define DEV_NOT_PRESENT 0x7f /* old name - compatibility */ -#define DEV_NOT_CAPABLE 0x7f /* peripheral qualifier of 0x3 */ - /* peripheral type of 0x1f */ - /* specifies no device but target present */ - -#define DEV_DISK_CAPABLE_NOT_PRESENT 0x20 /* peripheral qualifier of 0x1 */ - /* peripheral type of 0 - disk */ - /* specifies device capable, but not present */ - -#define DEV_PROC_CAPABLE_NOT_PRESENT 0x23 /* peripheral qualifier of 0x1 */ - /* peripheral type of 3 - processor */ - /* specifies device capable, but not present */ - -#define DEV_HISUPPORT 0x10 /* HiSup = 1; shows support for report luns */ - /* must be returned for lun 0. */ - -/* NOTE: Linux code assumes inquiry contains 36 bytes. Without checking length -* in buf[4] some linux code accesses bytes beyond 5 to retrieve vendor, product -* & revision. Yikes! So let us always send back 36 bytes, the minimum for -* inquiry result. */ -#define NO_DISK_INQUIRY_RESULT_LEN 36 - -#define MIN_INQUIRY_RESULT_LEN 5 /* we need at least 5 bytes minimum for inquiry - * result */ - -/* SCSI device version for no disk inquiry result */ -#define SCSI_SPC2_VER 4 /* indicates SCSI SPC2 (SPC3 is 5) */ - -/* Windows and Linux want different things for a non-existent lun. So, we'll let - * caller pass in the peripheral qualifier and type. - * NOTE:[4] SCSI returns (n-4); so we return length-1-4 or length-5. */ - -#define SET_NO_DISK_INQUIRY_RESULT(buf, len, lun, lun0notpresent, notpresent) \ - do { \ - memset(buf, 0, \ - MINNUM(len, \ - (unsigned int)NO_DISK_INQUIRY_RESULT_LEN)); \ - buf[2] = (u8)SCSI_SPC2_VER; \ - if (lun == 0) { \ - buf[0] = (u8)lun0notpresent; \ - buf[3] = (u8)DEV_HISUPPORT; \ - } else \ - buf[0] = (u8)notpresent; \ - buf[4] = (u8)( \ - MINNUM(len, \ - (unsigned int)NO_DISK_INQUIRY_RESULT_LEN) - 5);\ - if (len >= NO_DISK_INQUIRY_RESULT_LEN) { \ - buf[8] = 'D'; \ - buf[9] = 'E'; \ - buf[10] = 'L'; \ - buf[11] = 'L'; \ - buf[16] = 'P'; \ - buf[17] = 'S'; \ - buf[18] = 'E'; \ - buf[19] = 'U'; \ - buf[20] = 'D'; \ - buf[21] = 'O'; \ - buf[22] = ' '; \ - buf[23] = 'D'; \ - buf[24] = 'E'; \ - buf[25] = 'V'; \ - buf[26] = 'I'; \ - buf[27] = 'C'; \ - buf[28] = 'E'; \ - buf[30] = ' '; \ - buf[31] = '.'; \ - } \ - } while (0) - -/* -* Struct & Defines to support sense information. -*/ - -/* The following struct is returned in sensebuf field in uiscmdrsp_scsi. It is -* initialized in exactly the manner that is recommended in Windows (hence the -* odd values). -* When set, these fields will have the following values: -* ErrorCode = 0x70 indicates current error -* Valid = 1 indicates sense info is valid -* SenseKey contains sense key as defined by SCSI specs. -* AdditionalSenseCode contains sense key as defined by SCSI specs. -* AdditionalSenseCodeQualifier contains qualifier to sense code as defined by -* scsi docs. -* AdditionalSenseLength contains will be sizeof(sense_data)-8=10. -*/ -struct sense_data { - u8 errorcode:7; - u8 valid:1; - u8 segment_number; - u8 sense_key:4; - u8 reserved:1; - u8 incorrect_length:1; - u8 end_of_media:1; - u8 file_mark:1; - u8 information[4]; - u8 additional_sense_length; - u8 command_specific_information[4]; - u8 additional_sense_code; - u8 additional_sense_code_qualifier; - u8 fru_code; - u8 sense_key_specific[3]; -}; - -/* some SCSI ADSENSE codes */ -#ifndef SCSI_ADSENSE_LUN_NOT_READY -#define SCSI_ADSENSE_LUN_NOT_READY 0x04 -#endif /* */ -#ifndef SCSI_ADSENSE_ILLEGAL_COMMAND -#define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20 -#endif /* */ -#ifndef SCSI_ADSENSE_ILLEGAL_BLOCK -#endif /* */ -#ifndef SCSI_ADSENSE_ILLEGAL_BLOCK -#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21 -#endif /* */ -#ifndef SCSI_ADSENSE_INVALID_CDB -#define SCSI_ADSENSE_INVALID_CDB 0x24 -#endif /* */ -#ifndef SCSI_ADSENSE_INVALID_LUN -#define SCSI_ADSENSE_INVALID_LUN 0x25 -#endif /* */ -#ifndef SCSI_ADWRITE_PROTECT -#define SCSI_ADWRITE_PROTECT 0x27 -#endif /* */ -#ifndef SCSI_ADSENSE_MEDIUM_CHANGED -#define SCSI_ADSENSE_MEDIUM_CHANGED 0x28 -#endif /* */ -#ifndef SCSI_ADSENSE_BUS_RESET -#define SCSI_ADSENSE_BUS_RESET 0x29 -#endif /* */ -#ifndef SCSI_ADSENSE_NO_MEDIA_IN_DEVICE -#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a -#endif /* */ - -struct net_pkt_xmt { - int len; /* full length of data in the packet */ - int num_frags; /* number of fragments in frags containing data */ - struct phys_info frags[MAX_PHYS_INFO]; /* physical page information for - * each fragment */ - char ethhdr[ETH_HEADER_SIZE]; /* the ethernet header */ - struct { - /* these are needed for csum at uisnic end */ - u8 valid; /* 1 = rest of this struct is valid - else - * ignore */ - u8 hrawoffv; /* 1 = hwrafoff is valid */ - u8 nhrawoffv; /* 1 = nhwrafoff is valid */ - u16 protocol; /* specifies packet protocol */ - u32 csum; /* value used to set skb->csum at IOPart */ - u32 hrawoff; /* value used to set skb->h.raw at IOPart */ - /* hrawoff points to the start of the TRANSPORT LAYER HEADER */ - u32 nhrawoff; /* value used to set skb->nh.raw at IOPart */ - /* nhrawoff points to the start of the NETWORK LAYER HEADER */ - } lincsum; - - /* **** NOTE **** - * The full packet is described in frags but the ethernet header is - * separately kept in ethhdr so that uisnic doesn't have "MAP" the - * guest memory to get to the header. uisnic needs ethhdr to - * determine how to route the packet. - */ -}; - -struct net_pkt_xmtdone { - u32 xmt_done_result; /* result of NET_XMIT */ -#define XMIT_SUCCESS 0 -#define XMIT_FAILED 1 -}; - -/* RCVPOST_BUF_SIZe must be at most page_size(4096) - cache_line_size (64) The -* reason is because dev_skb_alloc which is used to generate RCV_POST skbs in -* virtnic requires that there is "overhead" in the buffer, and pads 16 bytes. I -* prefer to use 1 full cache line size for "overhead" so that transfers are -* better. IOVM requires that a buffer be represented by 1 phys_info structure -* which can only cover page_size. */ -#define RCVPOST_BUF_SIZE 4032 -#define MAX_NET_RCV_CHAIN \ - ((ETH_MAX_MTU+ETH_HEADER_SIZE + RCVPOST_BUF_SIZE-1) / RCVPOST_BUF_SIZE) - -struct net_pkt_rcvpost { - /* rcv buf size must be large enough to include ethernet data len + - * ethernet header len - we are choosing 2K because it is guaranteed - * to be describable */ - struct phys_info frag; /* physical page information for the - * single fragment 2K rcv buf */ - u64 unique_num; /* This is used to make sure that - * receive posts are returned to */ - /* the Adapter which sent them origonally. */ -}; - -struct net_pkt_rcv { - /* the number of receive buffers that can be chained */ - /* is based on max mtu and size of each rcv buf */ - u32 rcv_done_len; /* length of received data */ - u8 numrcvbufs; /* number of receive buffers that contain the */ - /* incoming data; guest end MUST chain these together. */ - void *rcvbuf[MAX_NET_RCV_CHAIN]; /* the list of receive buffers - * that must be chained; */ - /* each entry is a receive buffer provided by NET_RCV_POST. */ - /* NOTE: first rcvbuf in the chain will also be provided in net.buf. */ - u64 unique_num; - u32 rcvs_dropped_delta; -}; - -struct net_pkt_enbdis { - void *context; - u16 enable; /* 1 = enable, 0 = disable */ -}; - -struct net_pkt_macaddr { - void *context; - u8 macaddr[MAX_MACADDR_LEN]; /* 6 bytes */ -}; - -/* cmd rsp packet used for VNIC network traffic */ -struct uiscmdrsp_net { - enum net_types type; - void *buf; - union { - struct net_pkt_xmt xmt; /* used for NET_XMIT */ - struct net_pkt_xmtdone xmtdone; /* used for NET_XMIT_DONE */ - struct net_pkt_rcvpost rcvpost; /* used for NET_RCV_POST */ - struct net_pkt_rcv rcv; /* used for NET_RCV */ - struct net_pkt_enbdis enbdis; /* used for NET_RCV_ENBDIS, */ - /* NET_RCV_ENBDIS_ACK, */ - /* NET_RCV_PROMSIC, */ - /* and NET_CONNECT_STATUS */ - struct net_pkt_macaddr macaddr; - }; -}; - -struct uiscmdrsp_scsitaskmgmt { - enum task_mgmt_types tasktype; - - /* the type of task */ - struct uisscsi_dest vdest; - - /* the vdisk for which this task mgmt is generated */ - void *scsicmd; - - /* This is some handle that the guest has saved off for its own use. - * Its value is preserved by iopart & returned as is in the task mgmt - * rsp. */ - void *notify; - - /* For linux guests, this is a pointer to wait_queue_head that a - * thread is waiting on to see if the taskmgmt command has completed. - * For windows guests, this is a pointer to a location that a waiting - * thread is testing to see if the taskmgmt command has completed. - * When the rsp is received by guest, the thread receiving the - * response uses this to notify the thread waiting for taskmgmt - * command completion. Its value is preserved by iopart & returned - * as is in the task mgmt rsp. */ - void *notifyresult; - - /* this is a handle to location in guest where the result of the - * taskmgmt command (result field) is to saved off when the response - * is handled. Its value is preserved by iopart & returned as is in - * the task mgmt rsp. */ - char result; - - /* result of taskmgmt command - set by IOPart - values are: */ -#define TASK_MGMT_FAILED 0 -#define TASK_MGMT_SUCCESS 1 -}; - -/* The following is used by uissd to send disk add/remove notifications to - * Guest */ -/* Note that the vHba pointer is not used by the Client/Guest side. */ -struct uiscmdrsp_disknotify { - u8 add; /* 0-remove, 1-add */ - void *v_hba; /* Pointer to vhba_info for channel info to - * route msg */ - u32 channel, id, lun; /* SCSI Path of Disk to added or removed */ -}; - -/* The following is used by virthba/vSCSI to send the Acquire/Release commands -* to the IOVM. */ -struct uiscmdrsp_vdiskmgmt { - enum vdisk_mgmt_types vdisktype; - - /* the type of task */ - struct uisscsi_dest vdest; - - /* the vdisk for which this task mgmt is generated */ - void *scsicmd; - - /* This is some handle that the guest has saved off for its own use. - * Its value is preserved by iopart & returned as is in the task mgmt - * rsp. */ - void *notify; - - /* For linux guests, this is a pointer to wait_queue_head that a - * thread is waiting on to see if the taskmgmt command has completed. - * For windows guests, this is a pointer to a location that a waiting - * thread is testing to see if the taskmgmt command has completed. - * When the rsp is received by guest, the thread receiving the - * response uses this to notify the thread waiting for taskmgmt - * command completion. Its value is preserved by iopart & returned - * as is in the task mgmt rsp. */ - void *notifyresult; - - /* this is a handle to location in guest where the result of the - * taskmgmt command (result field) is to saved off when the response - * is handled. Its value is preserved by iopart & returned as is in - * the task mgmt rsp. */ - char result; - - /* result of taskmgmt command - set by IOPart - values are: */ -#define VDISK_MGMT_FAILED 0 -#define VDISK_MGMT_SUCCESS 1 -}; - -/* keeping cmd & rsp info in one structure for now cmd rsp packet for scsi */ -struct uiscmdrsp { - char cmdtype; - - /* describes what type of information is in the struct */ -#define CMD_SCSI_TYPE 1 -#define CMD_NET_TYPE 2 -#define CMD_SCSITASKMGMT_TYPE 3 -#define CMD_NOTIFYGUEST_TYPE 4 -#define CMD_VDISKMGMT_TYPE 5 - union { - struct uiscmdrsp_scsi scsi; - struct uiscmdrsp_net net; - struct uiscmdrsp_scsitaskmgmt scsitaskmgmt; - struct uiscmdrsp_disknotify disknotify; - struct uiscmdrsp_vdiskmgmt vdiskmgmt; - }; - void *private_data; /* used to send the response when the cmd is - * done (scsi & scsittaskmgmt). */ - struct uiscmdrsp *next; /* General Purpose Queue Link */ - struct uiscmdrsp *activeQ_next; /* Used to track active commands */ - struct uiscmdrsp *activeQ_prev; /* Used to track active commands */ -}; - -/* This is just the header of the IO channel. It is assumed that directly after -* this header there is a large region of memory which contains the command and -* response queues as specified in cmd_q and rsp_q SIGNAL_QUEUE_HEADERS. */ -struct spar_io_channel_protocol { - struct channel_header channel_header; - struct signal_queue_header cmd_q; - struct signal_queue_header rsp_q; - union { - struct { - struct vhba_wwnn wwnn; /* 8 bytes */ - struct vhba_config_max max; /* 20 bytes */ - } vhba; /* 28 */ - struct { - u8 macaddr[MAX_MACADDR_LEN]; /* 6 bytes */ - u32 num_rcv_bufs; /* 4 */ - u32 mtu; /* 4 */ - uuid_le zone_uuid; /* 16 */ - } vnic; /* total 30 */ - }; - -#define MAX_CLIENTSTRING_LEN 1024 - u8 client_string[MAX_CLIENTSTRING_LEN];/* NULL terminated - so holds - * max - 1 bytes */ -}; - -#pragma pack(pop) -/* ///////////// END PRAGMA PACK PUSH 1 /////////////////////////// */ - -/* define offsets to members of struct uiscmdrsp */ -#define OFFSET_CMDTYPE offsetof(struct uiscmdrsp, cmdtype) -#define OFFSET_SCSI offsetof(struct uiscmdrsp, scsi) -#define OFFSET_NET offsetof(struct uiscmdrsp, net) -#define OFFSET_SCSITASKMGMT offsetof(struct uiscmdrsp, scsitaskmgmt) -#define OFFSET_NEXT offsetof(struct uiscmdrsp, next) - -/* define offsets to members of struct uiscmdrsp_net */ -#define OFFSET_TYPE offsetof(struct uiscmdrsp_net, type) -#define OFFSET_BUF offsetof(struct uiscmdrsp_net, buf) -#define OFFSET_XMT offsetof(struct uiscmdrsp_net, xmt) -#define OFFSET_XMT_DONE_RESULT offsetof(struct uiscmdrsp_net, xmtdone) -#define OFFSET_RCVPOST offsetof(struct uiscmdrsp_net, rcvpost) -#define OFFSET_RCV_DONE_LEN offsetof(struct uiscmdrsp_net, rcv) -#define OFFSET_ENBDIS offsetof(struct uiscmdrsp_net, enbdis) - -/* define offsets to members of struct net_pkt_rcvpost */ -#define OFFSET_TOTALLEN offsetof(struct net_pkt_rcvpost, totallen) -#define OFFSET_FRAG offsetof(struct net_pkt_rcvpost, frag) - -/* -* INLINE functions for initializing and accessing I/O data channels -*/ - -#define SIZEOF_PROTOCOL (COVER(sizeof(struct spar_io_channel_protocol), 64)) -#define SIZEOF_CMDRSP (COVER(sizeof(struct uiscmdrsp), 64)) - -#define MIN_IO_CHANNEL_SIZE COVER(SIZEOF_PROTOCOL + \ - 2 * MIN_NUMSIGNALS * SIZEOF_CMDRSP, 4096) - -/* -* INLINE function for expanding a guest's pfn-off-size into multiple 4K page -* pfn-off-size entires. -*/ - -/* we deal with 4K page sizes when we it comes to passing page information - * between */ -/* Guest and IOPartition. */ -#define PI_PAGE_SIZE 0x1000 -#define PI_PAGE_MASK 0x0FFF -#define PI_PAGE_SHIFT 12 - -/* returns next non-zero index on success or zero on failure (i.e. out of - * room) - */ -static inline u16 -add_physinfo_entries(u32 inp_pfn, /* input - specifies the pfn to be used - * to add entries */ - u16 inp_off, /* input - specifies the off to be used - * to add entries */ - u32 inp_len, /* input - specifies the len to be used - * to add entries */ - u16 index, /* input - index in array at which new - * entries are added */ - u16 max_pi_arr_entries, /* input - specifies the maximum - * entries pi_arr can hold */ - struct phys_info pi_arr[]) /* input & output - array to - * which entries are added */ -{ - u32 len; - u16 i, firstlen; - - firstlen = PI_PAGE_SIZE - inp_off; - if (inp_len <= firstlen) { - /* the input entry spans only one page - add as is */ - if (index >= max_pi_arr_entries) - return 0; - pi_arr[index].pi_pfn = inp_pfn; - pi_arr[index].pi_off = (u16)inp_off; - pi_arr[index].pi_len = (u16)inp_len; - return index + 1; - } - - /* this entry spans multiple pages */ - for (len = inp_len, i = 0; len; - len -= pi_arr[index + i].pi_len, i++) { - if (index + i >= max_pi_arr_entries) - return 0; - pi_arr[index + i].pi_pfn = inp_pfn + i; - if (i == 0) { - pi_arr[index].pi_off = inp_off; - pi_arr[index].pi_len = firstlen; - } - - else { - pi_arr[index + i].pi_off = 0; - pi_arr[index + i].pi_len = - (u16)MINNUM(len, (u32)PI_PAGE_SIZE); - } - } - return index + i; -} - -#endif /* __IOCHANNEL_H__ */ diff --git a/kernel/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h b/kernel/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h deleted file mode 100644 index 2c42ce16e..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -#ifndef __VBUSCHANNEL_H__ -#define __VBUSCHANNEL_H__ - -/* The vbus channel is the channel area provided via the BUS_CREATE controlvm - * message for each virtual bus. This channel area is provided to both server - * and client ends of the bus. The channel header area is initialized by - * the server, and the remaining information is filled in by the client. - * We currently use this for the client to provide various information about - * the client devices and client drivers for the server end to see. - */ -#include <linux/uuid.h> -#include "vbusdeviceinfo.h" -#include "channel.h" - -/* {193b331b-c58f-11da-95a9-00e08161165f} */ -#define SPAR_VBUS_CHANNEL_PROTOCOL_UUID \ - UUID_LE(0x193b331b, 0xc58f, 0x11da, \ - 0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f) -static const uuid_le spar_vbus_channel_protocol_uuid = - SPAR_VBUS_CHANNEL_PROTOCOL_UUID; - -#define SPAR_VBUS_CHANNEL_PROTOCOL_SIGNATURE ULTRA_CHANNEL_PROTOCOL_SIGNATURE - -/* Must increment this whenever you insert or delete fields within this channel -* struct. Also increment whenever you change the meaning of fields within this -* channel struct so as to break pre-existing software. Note that you can -* usually add fields to the END of the channel struct withOUT needing to -* increment this. */ -#define SPAR_VBUS_CHANNEL_PROTOCOL_VERSIONID 1 - -#define SPAR_VBUS_CHANNEL_OK_CLIENT(ch) \ - spar_check_channel_client(ch, \ - spar_vbus_channel_protocol_uuid, \ - "vbus", \ - sizeof(struct spar_vbus_channel_protocol),\ - SPAR_VBUS_CHANNEL_PROTOCOL_VERSIONID, \ - SPAR_VBUS_CHANNEL_PROTOCOL_SIGNATURE) - -#define SPAR_VBUS_CHANNEL_OK_SERVER(actual_bytes) \ - (spar_check_channel_server(spar_vbus_channel_protocol_uuid, \ - "vbus", \ - sizeof(struct ultra_vbus_channel_protocol),\ - actual_bytes)) - -#pragma pack(push, 1) /* both GCC and VC now allow this pragma */ -struct spar_vbus_headerinfo { - u32 struct_bytes; /* size of this struct in bytes */ - u32 device_info_struct_bytes; /* sizeof(ULTRA_VBUS_DEVICEINFO) */ - u32 dev_info_count; /* num of items in DevInfo member */ - /* (this is the allocated size) */ - u32 chp_info_offset; /* byte offset from beginning of this struct */ - /* to the ChpInfo struct (below) */ - u32 bus_info_offset; /* byte offset from beginning of this struct */ - /* to the BusInfo struct (below) */ - u32 dev_info_offset; /* byte offset from beginning of this struct */ - /* to the DevInfo array (below) */ - u8 reserved[104]; -}; - -struct spar_vbus_channel_protocol { - struct channel_header channel_header; /* initialized by server */ - struct spar_vbus_headerinfo hdr_info; /* initialized by server */ - /* the remainder of this channel is filled in by the client */ - struct ultra_vbus_deviceinfo chp_info; - /* describes client chipset device and driver */ - struct ultra_vbus_deviceinfo bus_info; - /* describes client bus device and driver */ - struct ultra_vbus_deviceinfo dev_info[0]; - /* describes client device and driver for each device on the bus */ -}; - -#define VBUS_CH_SIZE_EXACT(MAXDEVICES) \ - (sizeof(ULTRA_VBUS_CHANNEL_PROTOCOL) + ((MAXDEVICES) * \ - sizeof(ULTRA_VBUS_DEVICEINFO))) -#define VBUS_CH_SIZE(MAXDEVICES) COVER(VBUS_CH_SIZE_EXACT(MAXDEVICES), 4096) - -#pragma pack(pop) - -#endif diff --git a/kernel/drivers/staging/unisys/common-spar/include/controlvmcompletionstatus.h b/kernel/drivers/staging/unisys/common-spar/include/controlvmcompletionstatus.h deleted file mode 100644 index f74f5d8c2..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/controlvmcompletionstatus.h +++ /dev/null @@ -1,94 +0,0 @@ -/* controlvmcompletionstatus.c - * - * Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -/* Defines for all valid values returned in the response message header - * completionStatus field. See controlvmchannel.h for description of - * the header: _CONTROLVM_MESSAGE_HEADER. - */ - -#ifndef __CONTROLVMCOMPLETIONSTATUS_H__ -#define __CONTROLVMCOMPLETIONSTATUS_H__ - -/* General Errors------------------------------------------------------[0-99] */ -#define CONTROLVM_RESP_SUCCESS 0 -#define CONTROLVM_RESP_ERROR_ALREADY_DONE 1 -#define CONTROLVM_RESP_ERROR_IOREMAP_FAILED 2 -#define CONTROLVM_RESP_ERROR_KMALLOC_FAILED 3 -#define CONTROLVM_RESP_ERROR_MESSAGE_ID_UNKNOWN 4 -#define CONTROLVM_RESP_ERROR_MESSAGE_ID_INVALID_FOR_CLIENT 5 - -/* CONTROLVM_INIT_CHIPSET-------------------------------------------[100-199] */ -#define CONTROLVM_RESP_ERROR_CLIENT_SWITCHCOUNT_NONZERO 100 -#define CONTROLVM_RESP_ERROR_EXPECTED_CHIPSET_INIT 101 - -/* Maximum Limit----------------------------------------------------[200-299] */ -#define CONTROLVM_RESP_ERROR_MAX_BUSES 201 /* BUS_CREATE */ -#define CONTROLVM_RESP_ERROR_MAX_DEVICES 202 /* DEVICE_CREATE */ -/* Payload and Parameter Related------------------------------------[400-499] */ -#define CONTROLVM_RESP_ERROR_PAYLOAD_INVALID 400 /* SWITCH_ATTACHEXTPORT, - * DEVICE_CONFIGURE */ -#define CONTROLVM_RESP_ERROR_INITIATOR_PARAMETER_INVALID 401 /* Multiple */ -#define CONTROLVM_RESP_ERROR_TARGET_PARAMETER_INVALID 402 /* DEVICE_CONFIGURE */ -#define CONTROLVM_RESP_ERROR_CLIENT_PARAMETER_INVALID 403 /* DEVICE_CONFIGURE */ -/* Specified[Packet Structure] Value-------------------------------[500-599] */ -#define CONTROLVM_RESP_ERROR_BUS_INVALID 500 /* SWITCH_ATTACHINTPORT, - * BUS_CONFIGURE, - * DEVICE_CREATE, - * DEVICE_CONFIG - * DEVICE_DESTROY */ -#define CONTROLVM_RESP_ERROR_DEVICE_INVALID 501 /* SWITCH_ATTACHINTPORT */ - /* DEVICE_CREATE, - * DEVICE_CONFIGURE, - * DEVICE_DESTROY */ -#define CONTROLVM_RESP_ERROR_CHANNEL_INVALID 502 /* DEVICE_CREATE, - * DEVICE_CONFIGURE */ -/* Partition Driver Callback Interface----------------------[600-699] */ -#define CONTROLVM_RESP_ERROR_VIRTPCI_DRIVER_FAILURE 604 /* BUS_CREATE, - * BUS_DESTROY, - * DEVICE_CREATE, - * DEVICE_DESTROY */ -/* Unable to invoke VIRTPCI callback */ -#define CONTROLVM_RESP_ERROR_VIRTPCI_DRIVER_CALLBACK_ERROR 605 - /* BUS_CREATE, - * BUS_DESTROY, - * DEVICE_CREATE, - * DEVICE_DESTROY */ -/* VIRTPCI Callback returned error */ -#define CONTROLVM_RESP_ERROR_GENERIC_DRIVER_CALLBACK_ERROR 606 - /* SWITCH_ATTACHEXTPORT, - * SWITCH_DETACHEXTPORT - * DEVICE_CONFIGURE */ - -/* generic device callback returned error */ -/* Bus Related------------------------------------------------------[700-799] */ -#define CONTROLVM_RESP_ERROR_BUS_DEVICE_ATTACHED 700 /* BUS_DESTROY */ -/* Channel Related--------------------------------------------------[800-899] */ -#define CONTROLVM_RESP_ERROR_CHANNEL_TYPE_UNKNOWN 800 /* GET_CHANNELINFO, - * DEVICE_DESTROY */ -#define CONTROLVM_RESP_ERROR_CHANNEL_SIZE_TOO_SMALL 801 /* DEVICE_CREATE */ -/* Chipset Shutdown Related---------------------------------------[1000-1099] */ -#define CONTROLVM_RESP_ERROR_CHIPSET_SHUTDOWN_FAILED 1000 -#define CONTROLVM_RESP_ERROR_CHIPSET_SHUTDOWN_ALREADY_ACTIVE 1001 - -/* Chipset Stop Related-------------------------------------------[1100-1199] */ -#define CONTROLVM_RESP_ERROR_CHIPSET_STOP_FAILED_BUS 1100 -#define CONTROLVM_RESP_ERROR_CHIPSET_STOP_FAILED_SWITCH 1101 - -/* Device Related-------------------------------------------------[1400-1499] */ -#define CONTROLVM_RESP_ERROR_DEVICE_UDEV_TIMEOUT 1400 - -#endif /* __CONTROLVMCOMPLETIONSTATUS_H__ not defined */ diff --git a/kernel/drivers/staging/unisys/common-spar/include/diagnostics/appos_subsystems.h b/kernel/drivers/staging/unisys/common-spar/include/diagnostics/appos_subsystems.h deleted file mode 100644 index 18cc9ed27..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/diagnostics/appos_subsystems.h +++ /dev/null @@ -1,310 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -/* Please note that this file is to be used ONLY for defining diagnostic - * subsystem values for the appos (sPAR Linux service partitions) component. - */ -#ifndef __APPOS_SUBSYSTEMS_H__ -#define __APPOS_SUBSYSTEMS_H__ - -#ifdef __KERNEL__ -#include <linux/kernel.h> -#include <linux/string.h> -#else -#include <stdio.h> -#include <string.h> -#endif - -static inline char * -subsys_unknown_to_s(int subsys, char *s, int n) -{ - snprintf(s, n, "SUBSYS-%-2.2d", subsys); - s[n - 1] = '\0'; - return s; -} - -#define SUBSYS_TO_MASK(subsys) (1ULL << (subsys)) - -/* The first SUBSYS_APPOS_MAX subsystems are the same for each AppOS type - * (IOVM, SMS, etc.) The rest have unique values for each AppOS type. - */ -#define SUBSYS_APPOS_MAX 16 - -#define SUBSYS_APPOS_DEFAULT 1 /* or "other" */ -#define SUBSYS_APPOS_CHIPSET 2 /* controlvm and other */ - /* low-level sPAR activity */ -#define SUBSYS_APPOS_BUS 3 /* sPAR bus */ -/* DAK #define SUBSYS_APPOS_DIAG 4 // diagnostics and dump */ -#define SUBSYS_APPOS_CHANNELACCESS 5 /* generic channel access */ -#define SUBSYS_APPOS_NICCLIENT 6 /* virtual NIC client */ -#define SUBSYS_APPOS_HBACLIENT 7 /* virtual HBA client */ -#define SUBSYS_APPOS_CONSOLESERIAL 8 /* sPAR virtual serial console */ -#define SUBSYS_APPOS_UISLIB 9 /* */ -#define SUBSYS_APPOS_VRTCUPDD 10 /* */ -#define SUBSYS_APPOS_WATCHDOG 11 /* watchdog timer and healthcheck */ -#define SUBSYS_APPOS_13 13 /* available */ -#define SUBSYS_APPOS_14 14 /* available */ -#define SUBSYS_APPOS_15 15 /* available */ -#define SUBSYS_APPOS_16 16 /* available */ -static inline char * -subsys_generic_to_s(int subsys, char *s, int n) -{ - switch (subsys) { - case SUBSYS_APPOS_DEFAULT: - strncpy(s, "APPOS_DEFAULT", n); - break; - case SUBSYS_APPOS_CHIPSET: - strncpy(s, "APPOS_CHIPSET", n); - break; - case SUBSYS_APPOS_BUS: - strncpy(s, "APPOS_BUS", n); - break; - case SUBSYS_APPOS_CHANNELACCESS: - strncpy(s, "APPOS_CHANNELACCESS", n); - break; - case SUBSYS_APPOS_NICCLIENT: - strncpy(s, "APPOS_NICCLIENT", n); - break; - case SUBSYS_APPOS_HBACLIENT: - strncpy(s, "APPOS_HBACLIENT", n); - break; - case SUBSYS_APPOS_CONSOLESERIAL: - strncpy(s, "APPOS_CONSOLESERIAL", n); - break; - case SUBSYS_APPOS_UISLIB: - strncpy(s, "APPOS_UISLIB", n); - break; - case SUBSYS_APPOS_VRTCUPDD: - strncpy(s, "APPOS_VRTCUPDD", n); - break; - case SUBSYS_APPOS_WATCHDOG: - strncpy(s, "APPOS_WATCHDOG", n); - break; - case SUBSYS_APPOS_13: - strncpy(s, "APPOS_13", n); - break; - case SUBSYS_APPOS_14: - strncpy(s, "APPOS_14", n); - break; - case SUBSYS_APPOS_15: - strncpy(s, "APPOS_15", n); - break; - case SUBSYS_APPOS_16: - strncpy(s, "APPOS_16", n); - break; - default: - subsys_unknown_to_s(subsys, s, n); - break; - } - s[n - 1] = '\0'; - return s; -} - -/* CONSOLE */ - -#define SUBSYS_CONSOLE_VIDEO (SUBSYS_APPOS_MAX + 1) /* 17 */ -#define SUBSYS_CONSOLE_KBDMOU (SUBSYS_APPOS_MAX + 2) /* 18 */ -#define SUBSYS_CONSOLE_04 (SUBSYS_APPOS_MAX + 4) -#define SUBSYS_CONSOLE_05 (SUBSYS_APPOS_MAX + 5) -#define SUBSYS_CONSOLE_06 (SUBSYS_APPOS_MAX + 6) -#define SUBSYS_CONSOLE_07 (SUBSYS_APPOS_MAX + 7) -#define SUBSYS_CONSOLE_08 (SUBSYS_APPOS_MAX + 8) -#define SUBSYS_CONSOLE_09 (SUBSYS_APPOS_MAX + 9) -#define SUBSYS_CONSOLE_10 (SUBSYS_APPOS_MAX + 10) -#define SUBSYS_CONSOLE_11 (SUBSYS_APPOS_MAX + 11) -#define SUBSYS_CONSOLE_12 (SUBSYS_APPOS_MAX + 12) -#define SUBSYS_CONSOLE_13 (SUBSYS_APPOS_MAX + 13) -#define SUBSYS_CONSOLE_14 (SUBSYS_APPOS_MAX + 14) -#define SUBSYS_CONSOLE_15 (SUBSYS_APPOS_MAX + 15) -#define SUBSYS_CONSOLE_16 (SUBSYS_APPOS_MAX + 16) -#define SUBSYS_CONSOLE_17 (SUBSYS_APPOS_MAX + 17) -#define SUBSYS_CONSOLE_18 (SUBSYS_APPOS_MAX + 18) -#define SUBSYS_CONSOLE_19 (SUBSYS_APPOS_MAX + 19) -#define SUBSYS_CONSOLE_20 (SUBSYS_APPOS_MAX + 20) -#define SUBSYS_CONSOLE_21 (SUBSYS_APPOS_MAX + 21) -#define SUBSYS_CONSOLE_22 (SUBSYS_APPOS_MAX + 22) -#define SUBSYS_CONSOLE_23 (SUBSYS_APPOS_MAX + 23) -#define SUBSYS_CONSOLE_24 (SUBSYS_APPOS_MAX + 24) -#define SUBSYS_CONSOLE_25 (SUBSYS_APPOS_MAX + 25) -#define SUBSYS_CONSOLE_26 (SUBSYS_APPOS_MAX + 26) -#define SUBSYS_CONSOLE_27 (SUBSYS_APPOS_MAX + 27) -#define SUBSYS_CONSOLE_28 (SUBSYS_APPOS_MAX + 28) -#define SUBSYS_CONSOLE_29 (SUBSYS_APPOS_MAX + 29) -#define SUBSYS_CONSOLE_30 (SUBSYS_APPOS_MAX + 30) -#define SUBSYS_CONSOLE_31 (SUBSYS_APPOS_MAX + 31) -#define SUBSYS_CONSOLE_32 (SUBSYS_APPOS_MAX + 32) -#define SUBSYS_CONSOLE_33 (SUBSYS_APPOS_MAX + 33) -#define SUBSYS_CONSOLE_34 (SUBSYS_APPOS_MAX + 34) -#define SUBSYS_CONSOLE_35 (SUBSYS_APPOS_MAX + 35) -#define SUBSYS_CONSOLE_36 (SUBSYS_APPOS_MAX + 36) -#define SUBSYS_CONSOLE_37 (SUBSYS_APPOS_MAX + 37) -#define SUBSYS_CONSOLE_38 (SUBSYS_APPOS_MAX + 38) -#define SUBSYS_CONSOLE_39 (SUBSYS_APPOS_MAX + 39) -#define SUBSYS_CONSOLE_40 (SUBSYS_APPOS_MAX + 40) -#define SUBSYS_CONSOLE_41 (SUBSYS_APPOS_MAX + 41) -#define SUBSYS_CONSOLE_42 (SUBSYS_APPOS_MAX + 42) -#define SUBSYS_CONSOLE_43 (SUBSYS_APPOS_MAX + 43) -#define SUBSYS_CONSOLE_44 (SUBSYS_APPOS_MAX + 44) -#define SUBSYS_CONSOLE_45 (SUBSYS_APPOS_MAX + 45) -#define SUBSYS_CONSOLE_46 (SUBSYS_APPOS_MAX + 46) - -static inline char * -subsys_console_to_s(int subsys, char *s, int n) -{ - switch (subsys) { - case SUBSYS_CONSOLE_VIDEO: - strncpy(s, "CONSOLE_VIDEO", n); - break; - case SUBSYS_CONSOLE_KBDMOU: - strncpy(s, "CONSOLE_KBDMOU", n); - break; - case SUBSYS_CONSOLE_04: - strncpy(s, "CONSOLE_04", n); - break; - case SUBSYS_CONSOLE_05: - strncpy(s, "CONSOLE_05", n); - break; - case SUBSYS_CONSOLE_06: - strncpy(s, "CONSOLE_06", n); - break; - case SUBSYS_CONSOLE_07: - strncpy(s, "CONSOLE_07", n); - break; - case SUBSYS_CONSOLE_08: - strncpy(s, "CONSOLE_08", n); - break; - case SUBSYS_CONSOLE_09: - strncpy(s, "CONSOLE_09", n); - break; - case SUBSYS_CONSOLE_10: - strncpy(s, "CONSOLE_10", n); - break; - case SUBSYS_CONSOLE_11: - strncpy(s, "CONSOLE_11", n); - break; - case SUBSYS_CONSOLE_12: - strncpy(s, "CONSOLE_12", n); - break; - case SUBSYS_CONSOLE_13: - strncpy(s, "CONSOLE_13", n); - break; - case SUBSYS_CONSOLE_14: - strncpy(s, "CONSOLE_14", n); - break; - case SUBSYS_CONSOLE_15: - strncpy(s, "CONSOLE_15", n); - break; - case SUBSYS_CONSOLE_16: - strncpy(s, "CONSOLE_16", n); - break; - case SUBSYS_CONSOLE_17: - strncpy(s, "CONSOLE_17", n); - break; - case SUBSYS_CONSOLE_18: - strncpy(s, "CONSOLE_18", n); - break; - case SUBSYS_CONSOLE_19: - strncpy(s, "CONSOLE_19", n); - break; - case SUBSYS_CONSOLE_20: - strncpy(s, "CONSOLE_20", n); - break; - case SUBSYS_CONSOLE_21: - strncpy(s, "CONSOLE_21", n); - break; - case SUBSYS_CONSOLE_22: - strncpy(s, "CONSOLE_22", n); - break; - case SUBSYS_CONSOLE_23: - strncpy(s, "CONSOLE_23", n); - break; - case SUBSYS_CONSOLE_24: - strncpy(s, "CONSOLE_24", n); - break; - case SUBSYS_CONSOLE_25: - strncpy(s, "CONSOLE_25", n); - break; - case SUBSYS_CONSOLE_26: - strncpy(s, "CONSOLE_26", n); - break; - case SUBSYS_CONSOLE_27: - strncpy(s, "CONSOLE_27", n); - break; - case SUBSYS_CONSOLE_28: - strncpy(s, "CONSOLE_28", n); - break; - case SUBSYS_CONSOLE_29: - strncpy(s, "CONSOLE_29", n); - break; - case SUBSYS_CONSOLE_30: - strncpy(s, "CONSOLE_30", n); - break; - case SUBSYS_CONSOLE_31: - strncpy(s, "CONSOLE_31", n); - break; - case SUBSYS_CONSOLE_32: - strncpy(s, "CONSOLE_32", n); - break; - case SUBSYS_CONSOLE_33: - strncpy(s, "CONSOLE_33", n); - break; - case SUBSYS_CONSOLE_34: - strncpy(s, "CONSOLE_34", n); - break; - case SUBSYS_CONSOLE_35: - strncpy(s, "CONSOLE_35", n); - break; - case SUBSYS_CONSOLE_36: - strncpy(s, "CONSOLE_36", n); - break; - case SUBSYS_CONSOLE_37: - strncpy(s, "CONSOLE_37", n); - break; - case SUBSYS_CONSOLE_38: - strncpy(s, "CONSOLE_38", n); - break; - case SUBSYS_CONSOLE_39: - strncpy(s, "CONSOLE_39", n); - break; - case SUBSYS_CONSOLE_40: - strncpy(s, "CONSOLE_40", n); - break; - case SUBSYS_CONSOLE_41: - strncpy(s, "CONSOLE_41", n); - break; - case SUBSYS_CONSOLE_42: - strncpy(s, "CONSOLE_42", n); - break; - case SUBSYS_CONSOLE_43: - strncpy(s, "CONSOLE_43", n); - break; - case SUBSYS_CONSOLE_44: - strncpy(s, "CONSOLE_44", n); - break; - case SUBSYS_CONSOLE_45: - strncpy(s, "CONSOLE_45", n); - break; - case SUBSYS_CONSOLE_46: - strncpy(s, "CONSOLE_46", n); - break; - default: - subsys_unknown_to_s(subsys, s, n); - break; - } - s[n - 1] = '\0'; - return s; -} - -#endif diff --git a/kernel/drivers/staging/unisys/common-spar/include/iovmcall_gnuc.h b/kernel/drivers/staging/unisys/common-spar/include/iovmcall_gnuc.h deleted file mode 100644 index 57dd93e0c..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/iovmcall_gnuc.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -/* Linux GCC Version (32-bit and 64-bit) */ -static inline unsigned long -__unisys_vmcall_gnuc(unsigned long tuple, unsigned long reg_ebx, - unsigned long reg_ecx) -{ - unsigned long result = 0; - unsigned int cpuid_eax, cpuid_ebx, cpuid_ecx, cpuid_edx; - - cpuid(0x00000001, &cpuid_eax, &cpuid_ebx, &cpuid_ecx, &cpuid_edx); - if (!(cpuid_ecx & 0x80000000)) - return -1; - - __asm__ __volatile__(".byte 0x00f, 0x001, 0x0c1" : "=a"(result) : - "a"(tuple), "b"(reg_ebx), "c"(reg_ecx)); - return result; -} - -static inline unsigned long -__unisys_extended_vmcall_gnuc(unsigned long long tuple, - unsigned long long reg_ebx, - unsigned long long reg_ecx, - unsigned long long reg_edx) -{ - unsigned long result = 0; - unsigned int cpuid_eax, cpuid_ebx, cpuid_ecx, cpuid_edx; - - cpuid(0x00000001, &cpuid_eax, &cpuid_ebx, &cpuid_ecx, &cpuid_edx); - if (!(cpuid_ecx & 0x80000000)) - return -1; - - __asm__ __volatile__(".byte 0x00f, 0x001, 0x0c1" : "=a"(result) : - "a"(tuple), "b"(reg_ebx), "c"(reg_ecx), "d"(reg_edx)); - return result; -} diff --git a/kernel/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h b/kernel/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h deleted file mode 100644 index 9b6d3e693..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h +++ /dev/null @@ -1,213 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -#ifndef __VBUSDEVICEINFO_H__ -#define __VBUSDEVICEINFO_H__ - -#include <linux/types.h> - -#pragma pack(push, 1) /* both GCC and VC now allow this pragma */ - -/* An array of this struct is present in the channel area for each vbus. - * (See vbuschannel.h.) - * It is filled in by the client side to provide info about the device - * and driver from the client's perspective. - */ -struct ultra_vbus_deviceinfo { - u8 devtype[16]; /* short string identifying the device type */ - u8 drvname[16]; /* driver .sys file name */ - u8 infostrs[96]; /* sequence of tab-delimited id strings: */ - /* <DRIVER_REV> <DRIVER_VERTAG> <DRIVER_COMPILETIME> */ - u8 reserved[128]; /* pad size to 256 bytes */ -}; - -#pragma pack(pop) - -/* Reads chars from the buffer at <src> for <srcmax> bytes, and writes to - * the buffer at <p>, which is <remain> bytes long, ensuring never to - * overflow the buffer at <p>, using the following rules: - * - printable characters are simply copied from the buffer at <src> to the - * buffer at <p> - * - intervening streaks of non-printable characters in the buffer at <src> - * are replaced with a single space in the buffer at <p> - * Note that we pay no attention to '\0'-termination. - * Returns the number of bytes written to <p>. - * - * Pass <p> == NULL and <remain> == 0 for this special behavior. In this - * case, we simply return the number of bytes that WOULD HAVE been written - * to a buffer at <p>, had it been infinitely big. - */ -static inline int -vbuschannel_sanitize_buffer(char *p, int remain, char *src, int srcmax) -{ - int chars = 0; - int nonprintable_streak = 0; - - while (srcmax > 0) { - if ((*src >= ' ') && (*src < 0x7f)) { - if (nonprintable_streak) { - if (remain > 0) { - *p = ' '; - p++; - remain--; - chars++; - } else if (p == NULL) { - chars++; - } - nonprintable_streak = 0; - } - if (remain > 0) { - *p = *src; - p++; - remain--; - chars++; - } else if (p == NULL) { - chars++; - } - } else { - nonprintable_streak = 1; - } - src++; - srcmax--; - } - return chars; -} - -#define VBUSCHANNEL_ADDACHAR(ch, p, remain, chars) \ - do { \ - if (remain <= 0) \ - break; \ - *p = ch; \ - p++; chars++; remain--; \ - } while (0) - -/* Converts the non-negative value at <num> to an ascii decimal string - * at <p>, writing at most <remain> bytes. Note there is NO '\0' termination - * written to <p>. - * - * Returns the number of bytes written to <p>. - * - * Note that we create this function because we need to do this operation in - * an environment-independent way (since we are in a common header file). - */ -static inline int -vbuschannel_itoa(char *p, int remain, int num) -{ - int digits = 0; - char s[32]; - int i; - - if (num == 0) { - /* '0' is a special case */ - if (remain <= 0) - return 0; - *p = '0'; - return 1; - } - /* form a backwards decimal ascii string in <s> */ - while (num > 0) { - if (digits >= (int)sizeof(s)) - return 0; - s[digits++] = (num % 10) + '0'; - num = num / 10; - } - if (remain < digits) { - /* not enough room left at <p> to hold number, so fill with - * '?' */ - for (i = 0; i < remain; i++, p++) - *p = '?'; - return remain; - } - /* plug in the decimal ascii string representing the number, by */ - /* reversing the string we just built in <s> */ - i = digits; - while (i > 0) { - i--; - *p = s[i]; - p++; - } - return digits; -} - -/* Reads <devInfo>, and converts its contents to a printable string at <p>, - * writing at most <remain> bytes. Note there is NO '\0' termination - * written to <p>. - * - * Pass <devix> >= 0 if you want a device index presented. - * - * Returns the number of bytes written to <p>. - */ -static inline int -vbuschannel_devinfo_to_string(struct ultra_vbus_deviceinfo *devinfo, - char *p, int remain, int devix) -{ - char *psrc; - int nsrc, x, i, pad; - int chars = 0; - - psrc = &devinfo->devtype[0]; - nsrc = sizeof(devinfo->devtype); - if (vbuschannel_sanitize_buffer(NULL, 0, psrc, nsrc) <= 0) - return 0; - - /* emit device index */ - if (devix >= 0) { - VBUSCHANNEL_ADDACHAR('[', p, remain, chars); - x = vbuschannel_itoa(p, remain, devix); - p += x; - remain -= x; - chars += x; - VBUSCHANNEL_ADDACHAR(']', p, remain, chars); - } else { - VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); - VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); - VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); - } - - /* emit device type */ - x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc); - p += x; - remain -= x; - chars += x; - pad = 15 - x; /* pad device type to be exactly 15 chars */ - for (i = 0; i < pad; i++) - VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); - VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); - - /* emit driver name */ - psrc = &devinfo->drvname[0]; - nsrc = sizeof(devinfo->drvname); - x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc); - p += x; - remain -= x; - chars += x; - pad = 15 - x; /* pad driver name to be exactly 15 chars */ - for (i = 0; i < pad; i++) - VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); - VBUSCHANNEL_ADDACHAR(' ', p, remain, chars); - - /* emit strings */ - psrc = &devinfo->infostrs[0]; - nsrc = sizeof(devinfo->infostrs); - x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc); - p += x; - remain -= x; - chars += x; - VBUSCHANNEL_ADDACHAR('\n', p, remain, chars); - - return chars; -} - -#endif diff --git a/kernel/drivers/staging/unisys/common-spar/include/version.h b/kernel/drivers/staging/unisys/common-spar/include/version.h deleted file mode 100644 index 83d1da7a2..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -/* version.h */ - -/* Common version/release info needed by all components goes here. - * (This file must compile cleanly in all environments.) - * Ultimately, this will be combined with defines generated dynamically as - * part of the sysgen, and some of the defines below may in fact end up - * being replaced with dynamically generated ones. - */ -#ifndef __VERSION_H__ -#define __VERSION_H__ - -#define SPARVER1 "1" -#define SPARVER2 "0" -#define SPARVER3 "0" -#define SPARVER4 "0" - -#define VERSION SPARVER1 "." SPARVER2 "." SPARVER3 "." SPARVER4 - -/* Here are various version forms needed in Windows environments. - */ -#define VISOR_PRODUCTVERSION SPARVERCOMMA -#define VISOR_PRODUCTVERSION_STR SPARVER1 "." SPARVER2 "." SPARVER3 "." \ - SPARVER4 -#define VISOR_OBJECTVERSION_STR SPARVER1 "," SPARVER2 "," SPARVER3 "," \ - SPARVER4 - -#define COPYRIGHT "Unisys Corporation" -#define COPYRIGHTDATE "2010 - 2013" - -#endif diff --git a/kernel/drivers/staging/unisys/common-spar/include/vmcallinterface.h b/kernel/drivers/staging/unisys/common-spar/include/vmcallinterface.h deleted file mode 100644 index 59a7459eb..000000000 --- a/kernel/drivers/staging/unisys/common-spar/include/vmcallinterface.h +++ /dev/null @@ -1,163 +0,0 @@ -/* Copyright (C) 2010 - 2013 UNISYS CORPORATION - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - */ - -#ifndef __IOMONINTF_H__ -#define __IOMONINTF_H__ - -/* -* This file contains all structures needed to support the VMCALLs for IO -* Virtualization. The VMCALLs are provided by Monitor and used by IO code -* running on IO Partitions. -*/ - -#ifdef __GNUC__ -#include "iovmcall_gnuc.h" -#endif /* */ -#include "diagchannel.h" - -#ifdef VMCALL_IO_CONTROLVM_ADDR -#undef VMCALL_IO_CONTROLVM_ADDR -#endif /* */ - -/* define subsystem number for AppOS, used in uislib driver */ -#define MDS_APPOS 0x4000000000000000L /* subsystem = 62 - AppOS */ -enum vmcall_monitor_interface_method_tuple { /* VMCALL identification tuples */ - /* Note: when a new VMCALL is added: - * - the 1st 2 hex digits correspond to one of the - * VMCALL_MONITOR_INTERFACE types and - * - the next 2 hex digits are the nth relative instance of within a - * type - * E.G. for VMCALL_VIRTPART_RECYCLE_PART, - * - the 0x02 identifies it as a VMCALL_VIRTPART type and - * - the 0x01 identifies it as the 1st instance of a VMCALL_VIRTPART - * type of VMCALL - */ - - VMCALL_IO_CONTROLVM_ADDR = 0x0501, /* used by all Guests, not just - * IO */ - VMCALL_IO_DIAG_ADDR = 0x0508, - VMCALL_IO_VISORSERIAL_ADDR = 0x0509, - VMCALL_QUERY_GUEST_VIRTUAL_TIME_OFFSET = 0x0708, /* Allow caller to - * query virtual time - * offset */ - VMCALL_CHANNEL_VERSION_MISMATCH = 0x0709, - VMCALL_POST_CODE_LOGEVENT = 0x070B, /* LOGEVENT Post Code (RDX) with - * specified subsystem mask (RCX - * - monitor_subsystems.h) and - * severity (RDX) */ - VMCALL_GENERIC_SURRENDER_QUANTUM_FOREVER = 0x0802, /* Yield the - * remainder & all - * future quantums of - * the caller */ - VMCALL_MEASUREMENT_DO_NOTHING = 0x0901, - VMCALL_UPDATE_PHYSICAL_TIME = 0x0a02 /* Allow - * ULTRA_SERVICE_CAPABILITY_TIME - * capable guest to make - * VMCALL */ -}; - -#define VMCALL_SUCCESS 0 -#define VMCALL_SUCCESSFUL(result) (result == 0) - -#ifdef __GNUC__ -#define unisys_vmcall(tuple, reg_ebx, reg_ecx) \ - __unisys_vmcall_gnuc(tuple, reg_ebx, reg_ecx) -#define unisys_extended_vmcall(tuple, reg_ebx, reg_ecx, reg_edx) \ - __unisys_extended_vmcall_gnuc(tuple, reg_ebx, reg_ecx, reg_edx) -#define ISSUE_IO_VMCALL(method, param, result) \ - (result = unisys_vmcall(method, (param) & 0xFFFFFFFF, \ - (param) >> 32)) -#define ISSUE_IO_EXTENDED_VMCALL(method, param1, param2, param3) \ - unisys_extended_vmcall(method, param1, param2, param3) - - /* The following uses VMCALL_POST_CODE_LOGEVENT interface but is currently - * not used much */ -#define ISSUE_IO_VMCALL_POSTCODE_SEVERITY(postcode, severity) \ -do { \ - ISSUE_IO_EXTENDED_VMCALL(VMCALL_POST_CODE_LOGEVENT, severity, \ - MDS_APPOS, postcode); \ -} while (0) -#endif - -/* Structures for IO VMCALLs */ - -/* ///////////// BEGIN PRAGMA PACK PUSH 1 ///////////////////////// */ -/* ///////////// ONLY STRUCT TYPE SHOULD BE BELOW */ -#pragma pack(push, 1) -struct phys_info { - u64 pi_pfn; - u16 pi_off; - u16 pi_len; -}; - -#pragma pack(pop) -/* ///////////// END PRAGMA PACK PUSH 1 /////////////////////////// */ - -/* ///////////// BEGIN PRAGMA PACK PUSH 1 ///////////////////////// */ -/* ///////////// ONLY STRUCT TYPE SHOULD BE BELOW */ -#pragma pack(push, 1) -/* Parameters to VMCALL_IO_CONTROLVM_ADDR interface */ -struct vmcall_io_controlvm_addr_params { - /* The Guest-relative physical address of the ControlVm channel. - * This VMCall fills this in with the appropriate address. */ - u64 address; /* contents provided by this VMCALL (OUT) */ - /* the size of the ControlVm channel in bytes This VMCall fills this - * in with the appropriate address. */ - u32 channel_bytes; /* contents provided by this VMCALL (OUT) */ - u8 unused[4]; /* Unused Bytes in the 64-Bit Aligned Struct */ -}; - -#pragma pack(pop) -/* ///////////// END PRAGMA PACK PUSH 1 /////////////////////////// */ - -/* ///////////// BEGIN PRAGMA PACK PUSH 1 ///////////////////////// */ -/* ///////////// ONLY STRUCT TYPE SHOULD BE BELOW */ -#pragma pack(push, 1) -/* Parameters to VMCALL_IO_DIAG_ADDR interface */ -struct vmcall_io_diag_addr_params { - /* The Guest-relative physical address of the diagnostic channel. - * This VMCall fills this in with the appropriate address. */ - u64 address; /* contents provided by this VMCALL (OUT) */ -}; - -#pragma pack(pop) -/* ///////////// END PRAGMA PACK PUSH 1 /////////////////////////// */ - -/* ///////////// BEGIN PRAGMA PACK PUSH 1 ///////////////////////// */ -/* ///////////// ONLY STRUCT TYPE SHOULD BE BELOW */ -#pragma pack(push, 1) -/* Parameters to VMCALL_IO_VISORSERIAL_ADDR interface */ -struct vmcall_io_visorserial_addr_params { - /* The Guest-relative physical address of the serial console - * channel. This VMCall fills this in with the appropriate - * address. */ - u64 address; /* contents provided by this VMCALL (OUT) */ -}; - -#pragma pack(pop) -/* ///////////// END PRAGMA PACK PUSH 1 /////////////////////////// */ - -/* Parameters to VMCALL_CHANNEL_MISMATCH interface */ -struct vmcall_channel_version_mismatch_params { - u8 chname[32]; /* Null terminated string giving name of channel - * (IN) */ - u8 item_name[32]; /* Null terminated string giving name of - * mismatched item (IN) */ - u32 line_no; /* line# where invoked. (IN) */ - u8 file_name[36]; /* source code where invoked - Null terminated - * string (IN) */ -}; - -#endif /* __IOMONINTF_H__ */ |