summaryrefslogtreecommitdiffstats
path: root/l10n/cs_CZ.php
blob: ff9781f0f97f0f6d4222b024aca22a97e444c3db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php $TRANSLATIONS = array(
"Error changing name of folder " => "Chyba při změně názvu složky ",
"Error collapsing folder." => "Chyba při sbalení složky.",
"Feed already exists." => "Kanál již existuje.",
"Error adding feed." => "Chyba při přidávání kanálu.",
"Feed added!" => "Kanál byl přidán.",
"Error adding folder." => "Chyba při přidávání adresáře.",
"Folder added!" => "Adresář byl přidán!",
"Error removing feed." => "Chyba při odstraňování příspěvku.",
"Error removing folder." => "Chyba při odstraňování složky.",
"Error updating feeds." => "Chyba při aktualizaci kanálů.",
"No file was submitted." => "Nebyl odeslán žádný soubor.",
"An error occurred while parsing the file." => "Nastala chyba při zpracování souboru.",
"Feed loaded!" => "Kanály načteny.",
"Error moving feed into folder." => "Chyba při přesunu kanálu do adresáře",
"No file path was submitted." => "Neuvedena cesta k souboru.",
"File doesn't exist:" => "Soubor neexistuje:",
"Error setting all items as read." => "Chyba při označování všech položek jako přečtené.",
"Error marking item as read." => "Chyba při nastavení položky jako přečtené.",
"Error updating feed." => "Chyba při aktualizaci kanálu.",
"Feed updated!" => "Kanál aktualizován.",
"News" => "Novinky",
"Error while loading the feed" => "Chyba při načítání kanálu",
"Error" => "Chyba",
"None" => "Žádné",
"Show only unread" => "Zobrazit pouze nepřečtené",
"Show everything" => "Zobrazit vše",
"Are you sure you want to delete this feed?" => "Opravdu si přejete odstranit tento kanál?",
"Are you sure you want to delete this folder and all its feeds?" => "Opravdu si přejete odstranit tuto složku a všechny její kanály?",
"Warning" => "Varování",
"Name of the folder cannot be empty." => "Název adresáře nesmí být prázdný.",
"Adding..." => "Přidávám %1",
"Add folder" => "Přidat složku",
"Changing..." => "Měním...",
"Change folder name" => "Změnit název složky",
"URL cannot be empty." => "URL nemůže být prázdná",
"Add feed" => "Přidat kanál",
"Error while parsing the feed" => "Chyba při zpracování kanálu",
"Fatal Error" => "Kritická chyba",
"No files selected." => "Nebyly vybrány žádné soubory.",
"Importing OPML file..." => "Importuji soubor OPML...",
"Not a valid type" => "Neplatný typ",
"{n_success} out of {n_total} feeds imported successfully!" => "{n_success} z {n_total} kanálů importováno úspěšně.",
"Select file" => "Vybrat soubor",
"no title" => "bez názvu",
"no name" => "bez názvu",
"no body" => "bez těla",
"subscriptions in ownCloud - News" => "odběry v ownCloud - Novinky",
"An error occurred" => "Nastala chyba",
"Nice! You have subscribed to " => "Dobře. Jste přihlášen k ",
"You had already subcribed to this feed!" => "Již jste přihlášen k tomuto kanálu.",
"You don't have any feed in your reader." => "Nemáte žádné kanály ve Vaší čtečce.",
"Address" => "Adresa",
"Subscribe" => "Odebírat",
"Import OPML" => "Importovat OPML",
"Upload file from desktop" => "Odeslat soubor z plochy",
"Upload" => "Odeslat",
"Select file from ownCloud" => "Vybrat soubor z ownCloud",
"Select" => "Vybrat",
"Select file from <a href=\"#\" class=\"settings\" id=\"browselink\">local filesystem</a> or <a href=\"#\" class=\"settings\" id=\"cloudlink\">cloud</a>" => "Vyberte soubor z <a href=\"#\" class=\"settings\" id=\"browselink\">místního souborového systému</a>, nebo <a href=\"#\" class=\"settings\" id=\"cloudlink\">cloudu</a>",
"Import" => "Importovat",
"Or..." => "Nebo...",
"Add feed or folder" => "Přidat kanál, či složku",
"Add Feed/Folder" => "Přidat Kanál/složku",
"Feed" => "Kanál",
"Folder" => "Složka",
"Settings" => "Nastavení",
"Add Folder" => "Přidat složku",
"Add new folder" => "Přidat novou složku",
"Folder name" => "Název složky",
"Add Subscription" => "Přidat odběr",
"Add new feed" => "Přidat nový kanál",
"Choose folder" => "Vybrat složku",
"Add" => "Přidat",
"New articles" => "Nové články",
"Mark all read" => "Označit vše jako přečtené",
"Starred" => "S hvězdičkou",
"Mark as unimportant" => "Označit jako nedůležité",
"Mark as important" => "Označit jako důležité",
"from" => "z",
"by" => "od",
"Share" => "Sdílet",
"Keep unread" => "Ponechat nepřečteno",
"Delete feed" => "Smazat kanál",
"Collapse" => "Svinout",
"Delete folder" => "Smazat složku",
"Rename folder" => "Přejmenovat složku",
"Import feeds" => "Importovat kanály",
"Export feeds" => "Exportovat kanály",
"Download OPML" => "Stáhnout OPML",
"Subscribelet" => "Subscribelet",
"Drag this to your browser bookmarks and click on it whenever you want to subscribe to a webpage quickly:" => "Přetáhněte do Vašeho prohlížeče a klikněte, pokud si přejete rychle odebírat stránku:"
);
f='#n953'>953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181
// SPDX-License-Identifier: GPL-2.0
/*
 * Xen PCI Frontend
 *
 * Author: Ryan Wilson <hap9@epoch.ncsc.mil>
 */
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <xen/xenbus.h>
#include <xen/events.h>
#include <xen/grant_table.h>
#include <xen/page.h>
#include <linux/spinlock.h>
#include <linux/pci.h>
#include <linux/msi.h>
#include <xen/interface/io/pciif.h>
#include <asm/xen/pci.h>
#include <linux/interrupt.h>
#include <linux/atomic.h>
#include <linux/workqueue.h>
#include <linux/bitops.h>
#include <linux/time.h>
#include <linux/ktime.h>
#include <xen/platform_pci.h>

#include <asm/xen/swiotlb-xen.h>
#define INVALID_GRANT_REF (0)
#define INVALID_EVTCHN    (-1)

struct pci_bus_entry {
	struct list_head list;
	struct pci_bus *bus;
};

#define _PDEVB_op_active		(0)
#define PDEVB_op_active			(1 << (_PDEVB_op_active))

struct pcifront_device {
	struct xenbus_device *xdev;
	struct list_head root_buses;

	int evtchn;
	int gnt_ref;

	int irq;

	/* Lock this when doing any operations in sh_info */
	spinlock_t sh_info_lock;
	struct xen_pci_sharedinfo *sh_info;
	struct work_struct op_work;
	unsigned long flags;

};

struct pcifront_sd {
	struct pci_sysdata sd;
	struct pcifront_device *pdev;
};

static inline struct pcifront_device *
pcifront_get_pdev(struct pcifront_sd *sd)
{
	return sd->pdev;
}

static inline void pcifront_init_sd(struct pcifront_sd *sd,
				    unsigned int domain, unsigned int bus,
				    struct pcifront_device *pdev)
{
	/* Because we do not expose that information via XenBus. */
	sd->sd.node = first_online_node;
	sd->sd.domain = domain;
	sd->pdev = pdev;
}

static DEFINE_SPINLOCK(pcifront_dev_lock);
static struct pcifront_device *pcifront_dev;

static int errno_to_pcibios_err(int errno)
{
	switch (errno) {
	case XEN_PCI_ERR_success:
		return PCIBIOS_SUCCESSFUL;

	case XEN_PCI_ERR_dev_not_found:
		return PCIBIOS_DEVICE_NOT_FOUND;

	case XEN_PCI_ERR_invalid_offset:
	case XEN_PCI_ERR_op_failed:
		return PCIBIOS_BAD_REGISTER_NUMBER;

	case XEN_PCI_ERR_not_implemented:
		return PCIBIOS_FUNC_NOT_SUPPORTED;

	case XEN_PCI_ERR_access_denied:
		return PCIBIOS_SET_FAILED;
	}
	return errno;
}

static inline void schedule_pcifront_aer_op(struct pcifront_device *pdev)
{
	if (test_bit(_XEN_PCIB_active, (unsigned long *)&pdev->sh_info->flags)
		&& !test_and_set_bit(_PDEVB_op_active, &pdev->flags)) {
		dev_dbg(&pdev->xdev->dev, "schedule aer frontend job\n");
		schedule_work(&pdev->op_work);
	}
}

static int do_pci_op(struct pcifront_device *pdev, struct xen_pci_op *op)
{
	int err = 0;
	struct xen_pci_op *active_op = &pdev->sh_info->op;
	unsigned long irq_flags;
	evtchn_port_t port = pdev->evtchn;
	unsigned irq = pdev->irq;
	s64 ns, ns_timeout;

	spin_lock_irqsave(&pdev->sh_info_lock, irq_flags);

	memcpy(active_op, op, sizeof(struct xen_pci_op));

	/* Go */
	wmb();