"ccid",
"usb",
"spapr-vio",
- "virtio-s390",
- "ccw")
+ "virtio-s390")
VIR_ENUM_IMPL(virDomainDisk, VIR_DOMAIN_DISK_TYPE_LAST,
"block",
virObjectUnlock(doms);
}
-static int
-virDomainDeviceCCWAddressIsValid(virDomainDeviceCCWAddressPtr addr)
-{
- return addr->cssid <= VIR_DOMAIN_DEVICE_CCW_MAX_CSSID &&
- addr->ssid <= VIR_DOMAIN_DEVICE_CCW_MAX_SSID &&
- addr->schid <= VIR_DOMAIN_DEVICE_CCW_MAX_SCHID;
-}
int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
int type)
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE:
return 1;
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390:
- return 1;
-
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
- return virDomainDeviceCCWAddressIsValid(&info->addr.ccw);
-
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB:
return 1;
}
return 0;
}
-static int
-virDomainDeviceInfoClearCCWAddress(virDomainDefPtr def ATTRIBUTE_UNUSED,
- virDomainDeviceDefPtr device ATTRIBUTE_UNUSED,
- virDomainDeviceInfoPtr info,
- void *opaque ATTRIBUTE_UNUSED)
-{
- if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
- memset(&info->addr, 0, sizeof(info->addr));
- info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE;
- }
- return 0;
-}
-
int virDomainDeviceInfoIterate(virDomainDefPtr def,
virDomainDeviceInfoCallback cb,
void *opaque)
virDomainDeviceInfoIterate(def, virDomainDeviceInfoClearPCIAddress, NULL);
}
-void virDomainDefClearCCWAddresses(virDomainDefPtr def)
-{
- virDomainDeviceInfoIterate(def, virDomainDeviceInfoClearCCWAddress, NULL);
-}
-
void virDomainDefClearDeviceAliases(virDomainDefPtr def)
{
virDomainDeviceInfoIterate(def, virDomainDeviceInfoClearAlias, NULL);
virBufferAsprintf(buf, " reg='0x%llx'", info->addr.spaprvio.reg);
break;
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
- virBufferAsprintf(buf, " cssid='0x%x' ssid='0x%x' schid='0x%04x'",
- info->addr.ccw.cssid,
- info->addr.ccw.ssid,
- info->addr.ccw.schid);
- break;
-
default:
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unknown address type '%d'"), info->type);
return ret;
}
-static int
-virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
- virDomainDeviceCCWAddressPtr addr)
-{
- int ret = -1;
- char *cssid;
- char *ssid;
- char *schid;
-
- memset(addr, 0, sizeof(*addr));
-
- cssid = virXMLPropString(node, "cssid");
- ssid = virXMLPropString(node, "ssid");
- schid = virXMLPropString(node, "schid");
-
- if (cssid && ssid && schid) {
- if (cssid &&
- virStrToLong_ui(cssid, NULL, 0, &addr->cssid) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Cannot parse <address> 'cssid' attribute"));
- goto cleanup;
- }
- if (ssid &&
- virStrToLong_ui(ssid, NULL, 0, &addr->ssid) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Cannot parse <address> 'ssid' attribute"));
- goto cleanup;
- }
- if (schid &&
- virStrToLong_ui(schid, NULL, 0, &addr->schid) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Cannot parse <address> 'schid' attribute"));
- goto cleanup;
- }
- if (!virDomainDeviceCCWAddressIsValid(addr)) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Invalid specification for virtio ccw"
- " address: cssid='%s' ssid='%s' schid='%s'"),
- cssid, ssid, schid);
- goto cleanup;
- }
- addr->assigned = true;
- } else if (cssid || ssid || schid) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Invalid partial specification for virtio ccw"
- " address"));
- goto cleanup;
- }
-
- ret = 0;
-
-cleanup:
- VIR_FREE(cssid);
- VIR_FREE(ssid);
- VIR_FREE(schid);
- return ret;
-}
-
static int
virDomainDeviceCcidAddressParseXML(xmlNodePtr node,
virDomainDeviceCcidAddressPtr addr)
goto cleanup;
break;
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
- if (virDomainDeviceCCWAddressParseXML
- (address, &info->addr.ccw) < 0)
- goto cleanup;
- break;
-
default:
/* Should not happen */
virReportError(VIR_ERR_INTERNAL_ERROR,
if (def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO &&
- def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390 &&
def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
* them we should make sure address type is correct */
if (def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO &&
- def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390 &&
def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB,
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO,
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390,
- VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW,
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST
};
unsigned int port;
};
-# define VIR_DOMAIN_DEVICE_CCW_MAX_CSSID 254
-# define VIR_DOMAIN_DEVICE_CCW_MAX_SSID 3
-# define VIR_DOMAIN_DEVICE_CCW_MAX_SCHID 65535
-
-typedef struct _virDomainDeviceCCWAddress virDomainDeviceCCWAddress;
-typedef virDomainDeviceCCWAddress *virDomainDeviceCCWAddressPtr;
-struct _virDomainDeviceCCWAddress {
- unsigned int cssid;
- unsigned int ssid;
- unsigned int schid;
- bool assigned;
-};
-
typedef struct _virDomainDeviceCcidAddress virDomainDeviceCcidAddress;
typedef virDomainDeviceCcidAddress *virDomainDeviceCcidAddressPtr;
struct _virDomainDeviceCcidAddress {
virDomainDeviceCcidAddress ccid;
virDomainDeviceUSBAddress usb;
virDomainDeviceSpaprVioAddress spaprvio;
- virDomainDeviceCCWAddress ccw;
} addr;
int mastertype;
union {
virDomainDeviceInfoPtr src);
void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info);
void virDomainDefClearPCIAddresses(virDomainDefPtr def);
-void virDomainDefClearCCWAddresses(virDomainDefPtr def);
void virDomainDefClearDeviceAliases(virDomainDefPtr def);
typedef int (*virDomainDeviceInfoCallback)(virDomainDefPtr def,