This commit is contained in:
thl 2023-07-19 11:00:40 +08:00
parent 3a1248c62f
commit be43a1fb06
152 changed files with 36199 additions and 48 deletions

5533
7986.config Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
obj-m += conninfra.o

View File

@ -5,12 +5,11 @@
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=conninfra
PKG_VERSION:=
PKG_VERSION:=bbf588
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)
PKG_MAINTAINER:=Kun-Ze Syue<kun-ze.syue@mediatek.com>
@ -22,6 +21,8 @@ PKG_KCONFIG:= \
FPGA_EARLY_PORTING \
CONNINFRA_AUTO_UP
PKG_CONFIG_DEPENDS:=$(foreach c, $(PKG_KCONFIG),$(if $(CONFIG_$c),CONFIG_$(c)))
include $(INCLUDE_DIR)/package.mk
# Specify package information for this program.

View File

@ -0,0 +1,66 @@
###############################################################################
# Necessary Check
#ifeq ($(AUTOCONF_H),)
# $(error AUTOCONF_H is not defined)
#endif
#ccflags-y += -imacros $(AUTOCONF_H)
# Force build fail on modpost warning
KBUILD_MODPOST_FAIL_ON_WARNINGS := y
###############################################################################
ccflags-y += -Werror
ccflags-y += -Wno-error=format
ccflags-y += -Wno-error=format-extra-args
ccflags-y += -Wframe-larger-than=1024
###############################################################################
MODULE_NAME := conninfra
obj-m += $(MODULE_NAME).o
###############################################################################
# common_main
###############################################################################
ccflags-y += \
-I$(SUBDIRS)/include \
-I$(SUBDIRS)/base/include \
-I$(SUBDIRS)/core/include \
-I$(SUBDIRS)/conf/include \
-I$(SUBDIRS)/platform/include
$(MODULE_NAME)-objs += base/ring.o
$(MODULE_NAME)-objs += base/osal.o
$(MODULE_NAME)-objs += base/msg_thread.o
$(MODULE_NAME)-objs += core/conninfra_core.o
$(MODULE_NAME)-objs += src/conninfra_dev.o
$(MODULE_NAME)-objs += src/conninfra.o
$(MODULE_NAME)-objs += platform/consys_hw.o
$(MODULE_NAME)-objs += platform/consys_hw_plat_data.o
$(MODULE_NAME)-objs += platform/pmic_mng.o
$(MODULE_NAME)-objs += platform/emi_mng.o
$(MODULE_NAME)-objs += platform/consys_reg_mng.o
# By Plaftfrom
# MT7986
ifeq ($(CONFIG_MTK_CONNINFRA_APSOC_MT7986),y)
ccflags-y += \
-I$(SUBDIRS)/platform/mt7986/include -DCONNINFRA_APSOC_MT7986
$(MODULE_NAME)-objs += platform/mt7986/mt7986.o
$(MODULE_NAME)-objs += platform/mt7986/mt7986_pmic.o
$(MODULE_NAME)-objs += platform/mt7986/mt7986_consys_reg.o
$(MODULE_NAME)-objs += platform/mt7986/mt7986_pos.o
$(MODULE_NAME)-objs += platform/mt7986/mt7986_emi.o
endif
# MT7981
ifeq ($(CONFIG_MTK_CONNINFRA_APSOC_MT7981),y)
ccflags-y += \
-I$(SUBDIRS)/platform/mt7981/include -DCONNINFRA_APSOC_MT7981
$(MODULE_NAME)-objs += platform/mt7981/mt7981.o
$(MODULE_NAME)-objs += platform/mt7981/mt7981_pmic.o
$(MODULE_NAME)-objs += platform/mt7981/mt7981_consys_reg.o
$(MODULE_NAME)-objs += platform/mt7981/mt7981_pos.o
$(MODULE_NAME)-objs += platform/mt7981/mt7981_emi.o
endif

View File

@ -0,0 +1,202 @@
The GNU General Public License (GPL)
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU
General Public License is intended to guarantee your freedom to share and change free software--to make sure the
software is free for all its users. This General Public License applies to most of the Free Software Foundation's
software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is
covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make
sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you
receive source code or can get it if you want it, that you can change the software or use pieces of it in new free
programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to
surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the
software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all
the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them
these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty
for this free software. If the software is modified by someone else and passed on, we want its recipients to know that
what they have is not the original, so that any problems introduced by others will not reflect on the original authors'
reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors
of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this,
we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it
may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or
work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to
say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into
another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is
addressed as "you".
Activities other than copying, distribution and modification are not covered by this License; they are outside its
scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents
constitute a work based on the Program (independent of having been made by running the Program). Whether that is true
depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided
that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of
warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other
recipients of the Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection
in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and
copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of
these conditions:
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any
change.
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the
Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this
License.
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for
such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright
notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may
redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if
the Program itself is interactive but does not normally print such an announcement, your work based on the Program is
not required to print an announcement.)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the
Program, and can be reasonably considered independent and separate works in themselves, then this License, and its
terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same
sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part
regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you;
rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the
Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the
Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms
of Sections 1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than
your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source
code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange;
or,
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This
alternative is allowed only for noncommercial distribution and only if you received the program in object code or
executable form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making modifications to it. For an executable work,
complete source code means all the source code for all modules it contains, plus any associated interface definition
files, plus the scripts used to control compilation and installation of the executable. However, as a special exception,
the source code distributed need not include anything that is normally distributed (in either source or binary form)
with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless
that component itself accompanies the executable.
If distribution of executable or object code is made by offering access to copy from a designated place, then offering
equivalent access to copy the source code from the same place counts as distribution of the source code, even though
third parties are not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your
rights under this License. However, parties who have received copies, or rights, from you under this License will not
have their licenses terminated so long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you
permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do
not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you
indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or
modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a
license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You
may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not
responsible for enforcing compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to
patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the
conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as
to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence
you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution
of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy
both it and this License would be to refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the
section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest
validity of any such claims; this section has the sole purpose of protecting the integrity of the free software
distribution system, which is implemented by public license practices. Many people have made generous contributions to
the wide range of software distributed through that system in reliance on consistent application of that system; it is
up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee
cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted
interfaces, the original copyright holder who places the Program under this License may add an explicit geographical
distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.
Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or
concerns.
Each version is given a distinguishing version number. If the Program specifies a version number of this License which
applies to it and "any later version", you have the option of following the terms and conditions either of that version
or of any later version published by the Free Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are
different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation,
write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two
goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of
software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY
WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY
OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS

View File

@ -0,0 +1,141 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _BASE_MSG_THREAD_H_
#define _BASE_MSG_THREAD_H_
#include "osal.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define MSG_THREAD_OP_DATA_SIZE 8
#define MSG_THREAD_OP_BUF_SIZE 64
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
struct msg_op_data {
unsigned int op_id; /* Event ID */
unsigned int info_bit; /* Reserved */
size_t op_data[MSG_THREAD_OP_DATA_SIZE]; /* OP Data */
};
struct msg_op {
struct msg_op_data op;
OSAL_SIGNAL signal;
int result;
atomic_t ref_count;
};
struct msg_op_q {
OSAL_SLEEPABLE_LOCK lock;
unsigned int write;
unsigned int read;
unsigned int size;
struct msg_op *queue[MSG_THREAD_OP_BUF_SIZE];
};
typedef OSAL_OP_DAT msg_evt_op;
typedef int(*msg_opid_func) (struct msg_op_data *);
struct msg_thread_ctx {
OSAL_THREAD thread; /* core thread */
OSAL_EVENT evt;
struct msg_op_q free_op_q; /* free op queue */
struct msg_op_q active_op_q; /* active op queue */
struct msg_op op_q_inst[MSG_THREAD_OP_BUF_SIZE]; /* real op instances */
struct msg_op *cur_op; /* current op */
int op_func_size;
const msg_opid_func *op_func;
struct osal_op_history op_history;
};
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
#define MSG_OP_TIMEOUT 20000
int msg_thread_init(struct msg_thread_ctx *ctx, const char *name,
const msg_opid_func *func, int op_size);
int msg_thread_deinit(struct msg_thread_ctx *ctx);
/* timeout:
* 0: default value (by MSG_OP_TIMEOUT define)
* >0: cutom timeout (ms)
*/
int msg_thread_send(struct msg_thread_ctx *ctx, int opid);
int msg_thread_send_1(struct msg_thread_ctx *ctx, int opid,
size_t param1);
int msg_thread_send_2(struct msg_thread_ctx *ctx, int opid,
size_t param1, size_t param2);
int msg_thread_send_wait(struct msg_thread_ctx *ctx, int opid,
int timeout);
int msg_thread_send_wait_1(struct msg_thread_ctx *ctx, int opid,
int timeout, size_t param1);
int msg_thread_send_wait_2(struct msg_thread_ctx *ctx, int opid,
int timeout, size_t param1, size_t param2);
int msg_thread_send_wait_3(struct msg_thread_ctx *ctx, int opid, int timeout, size_t param1,
size_t param2,size_t param3);
int msg_thread_dump(struct msg_thread_ctx *ctx);
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _BASE_MSG_THREAD_H_ */

View File

@ -0,0 +1,399 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _OSAL_H_
#define _OSAL_H_
#include <linux/workqueue.h>
#include <linux/mutex.h>
#include <linux/completion.h>
#include <linux/wait.h>
#include "ring.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define OS_BIT_OPS_SUPPORT 1
#ifndef MTK_CONN_BOOL_TRUE
#define MTK_CONN_BOOL_FALSE ((MTK_CONN_BOOL) 0)
#define MTK_CONN_BOOL_TRUE ((MTK_CONN_BOOL) 1)
#endif
#define _osal_inline_ inline
#define MAX_THREAD_NAME_LEN 16
#define MAX_HISTORY_NAME_LEN 16
#define OSAL_OP_BUF_SIZE 64
#if (defined(CONFIG_MTK_GMO_RAM_OPTIMIZE) && !defined(CONFIG_MTK_ENG_BUILD))
#define OSAL_OP_DATA_SIZE 8
#else
#define OSAL_OP_DATA_SIZE 32
#endif
#define DBG_LOG_STR_SIZE 256
#define osal_sizeof(x) sizeof(x)
#define osal_array_size(x) ARRAY_SIZE(x)
#ifndef NAME_MAX
#define NAME_MAX 256
#endif
#define WMT_OP_BIT(x) (0x1UL << x)
#define WMT_OP_HIF_BIT WMT_OP_BIT(0)
#define GET_BIT_MASK(value, mask) ((value) & (mask))
#define SET_BIT_MASK(pdest, value, mask) (*(pdest) = (GET_BIT_MASK(*(pdest), ~(mask)) | GET_BIT_MASK(value, mask)))
#define GET_BIT_RANGE(data, end, begin) ((data) & GENMASK(end, begin))
#define SET_BIT_RANGE(pdest, data, end, begin) (SET_BIT_MASK(pdest, data, GENMASK(end, begin)))
#define RB_LATEST(prb) ((prb)->write - 1)
#define RB_SIZE(prb) ((prb)->size)
#define RB_MASK(prb) (RB_SIZE(prb) - 1)
#define RB_COUNT(prb) ((prb)->write - (prb)->read)
#define RB_FULL(prb) (RB_COUNT(prb) >= RB_SIZE(prb))
#define RB_EMPTY(prb) ((prb)->write == (prb)->read)
#define RB_INIT(prb, qsize) \
do { \
(prb)->read = (prb)->write = 0; \
(prb)->size = (qsize); \
} while (0)
#define RB_PUT(prb, value) \
do { \
if (!RB_FULL(prb)) { \
(prb)->queue[(prb)->write & RB_MASK(prb)] = value; \
++((prb)->write); \
} \
else { \
pr_warn("RB is full!"); \
} \
} while (0)
#define RB_GET(prb, value) \
do { \
if (!RB_EMPTY(prb)) { \
value = (prb)->queue[(prb)->read & RB_MASK(prb)]; \
++((prb)->read); \
if (RB_EMPTY(prb)) { \
(prb)->read = (prb)->write = 0; \
} \
} \
else { \
value = NULL; \
pr_warn("RB is empty!"); \
} \
} while (0)
#define RB_GET_LATEST(prb, value) \
do { \
if (!RB_EMPTY(prb)) { \
value = (prb)->queue[RB_LATEST(prb) & RB_MASK(prb)]; \
if (RB_EMPTY(prb)) { \
(prb)->read = (prb)->write = 0; \
} \
} \
else { \
value = NULL; \
} \
} while (0)
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
typedef int MTK_CONN_BOOL;
typedef int(*P_COND) (void *);
typedef struct _OSAL_UNSLEEPABLE_LOCK_ {
spinlock_t lock;
unsigned long flag;
} OSAL_UNSLEEPABLE_LOCK, *P_OSAL_UNSLEEPABLE_LOCK;
typedef struct _OSAL_SLEEPABLE_LOCK_ {
struct mutex lock;
} OSAL_SLEEPABLE_LOCK, *P_OSAL_SLEEPABLE_LOCK;
typedef struct _OSAL_SIGNAL_ {
struct completion comp;
unsigned int timeoutValue;
unsigned int timeoutExtension; /* max number of timeout caused by thread not able to acquire CPU */
} OSAL_SIGNAL, *P_OSAL_SIGNAL;
typedef struct _OSAL_EVENT_ {
wait_queue_head_t waitQueue;
unsigned int timeoutValue;
int waitFlag;
} OSAL_EVENT, *P_OSAL_EVENT;
/* Data collected from sched_entity and sched_statistics */
typedef struct _OSAL_THREAD_SCHEDSTATS_ {
unsigned long long time; /* when marked: the profiling start time(ms), when unmarked: total duration(ms) */
unsigned long long exec; /* time spent in exec (sum_exec_runtime) */
unsigned long long runnable; /* time spent in run-queue while not being scheduled (wait_sum) */
unsigned long long iowait; /* time spent waiting for I/O (iowait_sum) */
} OSAL_THREAD_SCHEDSTATS, *P_OSAL_THREAD_SCHEDSTATS;
typedef struct _OSAL_THREAD_ {
struct task_struct *pThread;
void *pThreadFunc;
void *pThreadData;
char threadName[MAX_THREAD_NAME_LEN];
} OSAL_THREAD, *P_OSAL_THREAD;
typedef struct _OSAL_FIFO_ {
/*fifo definition */
void *pFifoBody;
spinlock_t fifoSpinlock;
/*fifo operations */
int (*FifoInit)(struct _OSAL_FIFO_ *pFifo, unsigned char *buf, unsigned int);
int (*FifoDeInit)(struct _OSAL_FIFO_ *pFifo);
int (*FifoReset)(struct _OSAL_FIFO_ *pFifo);
int (*FifoSz)(struct _OSAL_FIFO_ *pFifo);
int (*FifoAvailSz)(struct _OSAL_FIFO_ *pFifo);
int (*FifoLen)(struct _OSAL_FIFO_ *pFifo);
int (*FifoIsEmpty)(struct _OSAL_FIFO_ *pFifo);
int (*FifoIsFull)(struct _OSAL_FIFO_ *pFifo);
int (*FifoDataIn)(struct _OSAL_FIFO_ *pFifo, const void *buf, unsigned int len);
int (*FifoDataOut)(struct _OSAL_FIFO_ *pFifo, void *buf, unsigned int len);
} OSAL_FIFO, *P_OSAL_FIFO;
typedef struct firmware osal_firmware;
typedef struct _OSAL_OP_DAT {
unsigned int opId; /* Event ID */
unsigned int u4InfoBit; /* Reserved */
size_t au4OpData[OSAL_OP_DATA_SIZE]; /* OP Data */
} OSAL_OP_DAT, *P_OSAL_OP_DAT;
typedef struct _OSAL_LXOP_ {
OSAL_OP_DAT op;
OSAL_SIGNAL signal;
int result;
atomic_t ref_count;
} OSAL_OP, *P_OSAL_OP;
typedef struct _OSAL_LXOP_Q {
OSAL_SLEEPABLE_LOCK sLock;
unsigned int write;
unsigned int read;
unsigned int size;
P_OSAL_OP queue[OSAL_OP_BUF_SIZE];
} OSAL_OP_Q, *P_OSAL_OP_Q;
typedef struct _OSAL_BIT_OP_VAR_ {
unsigned long data;
OSAL_UNSLEEPABLE_LOCK opLock;
} OSAL_BIT_OP_VAR, *P_OSAL_BIT_OP_VAR;
typedef unsigned int (*P_OSAL_EVENT_CHECKER) (P_OSAL_THREAD pThread);
struct osal_op_history_entry {
void *opbuf_address;
unsigned int op_id;
unsigned int opbuf_ref_count;
unsigned int op_info_bit;
size_t param_0;
size_t param_1;
size_t param_2;
size_t param_3;
unsigned long long ts;
unsigned long usec;
};
struct osal_op_history {
struct ring ring_buffer;
struct osal_op_history_entry *queue;
spinlock_t lock;
struct ring dump_ring_buffer;
struct work_struct dump_work;
unsigned char name[MAX_HISTORY_NAME_LEN];
};
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
void FlashRead(char *name,unsigned char *value, unsigned long offset, unsigned long size);
void FlashWrite(char *name, unsigned char *p, unsigned long a, unsigned long b);
unsigned int osal_strlen(const char *str);
int osal_strcmp(const char *dst, const char *src);
int osal_strncmp(const char *dst, const char *src, unsigned int len);
char *osal_strcpy(char *dst, const char *src);
char *osal_strncpy(char *dst, const char *src, unsigned int len);
char *osal_strcat(char *dst, const char *src);
char *osal_strncat(char *dst, const char *src, unsigned int len);
char *osal_strchr(const char *str, unsigned char c);
char *osal_strsep(char **str, const char *c);
int osal_strtol(const char *str, unsigned int adecimal, long *res);
char *osal_strstr(char *str1, const char *str2);
char *osal_strnstr(char *str1, const char *str2, int n);
void osal_bug_on(unsigned int val);
int osal_snprintf(char *buf, unsigned int len, const char *fmt, ...);
int osal_sprintf(char *str, const char *format, ...);
void *osal_malloc(unsigned int size);
void osal_free(const void *dst);
void *osal_memset(void *buf, int i, unsigned int len);
void *osal_memcpy(void *dst, const void *src, unsigned int len);
void osal_memcpy_fromio(void *dst, const void *src, unsigned int len);
void osal_memcpy_toio(void *dst, const void *src, unsigned int len);
int osal_memcmp(const void *buf1, const void *buf2, unsigned int len);
int osal_sleep_ms(unsigned int ms);
int osal_udelay(unsigned int us);
int osal_usleep_range(unsigned long min, unsigned long max);
int osal_fifo_init(P_OSAL_FIFO pFifo, unsigned char *buffer, unsigned int size);
void osal_fifo_deinit(P_OSAL_FIFO pFifo);
int osal_fifo_reset(P_OSAL_FIFO pFifo);
unsigned int osal_fifo_in(P_OSAL_FIFO pFifo, unsigned char *buffer,
unsigned int size);
unsigned int osal_fifo_out(P_OSAL_FIFO pFifo, unsigned char *buffer,
unsigned int size);
unsigned int osal_fifo_len(P_OSAL_FIFO pFifo);
unsigned int osal_fifo_sz(P_OSAL_FIFO pFifo);
unsigned int osal_fifo_avail(P_OSAL_FIFO pFifo);
unsigned int osal_fifo_is_empty(P_OSAL_FIFO pFifo);
unsigned int osal_fifo_is_full(P_OSAL_FIFO pFifo);
#if defined(CONFIG_PROVE_LOCKING)
#define osal_unsleepable_lock_init(l) { spin_lock_init(&((l)->lock)); }
#else
int osal_unsleepable_lock_init(P_OSAL_UNSLEEPABLE_LOCK);
#endif
int osal_lock_unsleepable_lock(P_OSAL_UNSLEEPABLE_LOCK);
int osal_unlock_unsleepable_lock(P_OSAL_UNSLEEPABLE_LOCK);
int osal_unsleepable_lock_deinit(P_OSAL_UNSLEEPABLE_LOCK);
#if defined(CONFIG_PROVE_LOCKING)
#define osal_sleepable_lock_init(l) { mutex_init(&((l)->lock)); }
#else
int osal_sleepable_lock_init(P_OSAL_SLEEPABLE_LOCK);
#endif
int osal_lock_sleepable_lock(P_OSAL_SLEEPABLE_LOCK);
int osal_unlock_sleepable_lock(P_OSAL_SLEEPABLE_LOCK);
int osal_trylock_sleepable_lock(P_OSAL_SLEEPABLE_LOCK);
int osal_sleepable_lock_deinit(P_OSAL_SLEEPABLE_LOCK);
int osal_signal_init(P_OSAL_SIGNAL);
int osal_wait_for_signal(P_OSAL_SIGNAL);
int osal_wait_for_signal_timeout(P_OSAL_SIGNAL, P_OSAL_THREAD);
int osal_raise_signal(P_OSAL_SIGNAL);
int osal_signal_active_state(P_OSAL_SIGNAL pSignal);
int osal_signal_deinit(P_OSAL_SIGNAL);
int osal_event_init(P_OSAL_EVENT);
int osal_wait_for_event(P_OSAL_EVENT, P_COND, void*);
int osal_wait_for_event_timeout(P_OSAL_EVENT, P_COND, void*);
extern int osal_trigger_event(P_OSAL_EVENT);
int osal_event_deinit(P_OSAL_EVENT);
long osal_wait_for_event_bit_set(P_OSAL_EVENT pEvent, unsigned long *pState, unsigned int bitOffset);
long osal_wait_for_event_bit_clr(P_OSAL_EVENT pEvent, unsigned long *pState, unsigned int bitOffset);
int osal_thread_create(P_OSAL_THREAD);
int osal_thread_run(P_OSAL_THREAD);
int osal_thread_should_stop(P_OSAL_THREAD);
int osal_thread_stop(P_OSAL_THREAD);
/*int osal_thread_wait_for_event(P_OSAL_THREAD, P_OSAL_EVENT);*/
int osal_thread_wait_for_event(P_OSAL_THREAD, P_OSAL_EVENT, P_OSAL_EVENT_CHECKER);
/*check pOsalLxOp and OSAL_THREAD_SHOULD_STOP*/
int osal_thread_destroy(P_OSAL_THREAD);
int osal_thread_sched_mark(P_OSAL_THREAD, P_OSAL_THREAD_SCHEDSTATS schedstats);
int osal_thread_sched_unmark(P_OSAL_THREAD pThread, P_OSAL_THREAD_SCHEDSTATS schedstats);
int osal_clear_bit(unsigned int bitOffset, P_OSAL_BIT_OP_VAR pData);
int osal_set_bit(unsigned int bitOffset, P_OSAL_BIT_OP_VAR pData);
int osal_test_bit(unsigned int bitOffset, P_OSAL_BIT_OP_VAR pData);
int osal_test_and_clear_bit(unsigned int bitOffset, P_OSAL_BIT_OP_VAR pData);
int osal_test_and_set_bit(unsigned int bitOffset, P_OSAL_BIT_OP_VAR pData);
int osal_gettimeofday(int *sec, int *usec);
int osal_gettimeofday2(struct timeval *tv);
//int osal_printtimeofday(const unsigned char *prefix);
void osal_get_local_time(unsigned long long *sec, unsigned long *nsec);
unsigned long long osal_elapsed_us(unsigned long long ts, unsigned long usec);
void osal_buffer_dump(const unsigned char *buf, const unsigned char *title, unsigned int len, unsigned int limit);
void osal_buffer_dump_data(const unsigned int *buf, const unsigned char *title, const unsigned int len, const unsigned int limit,
const int flag);
unsigned int osal_op_get_id(P_OSAL_OP pOp);
MTK_CONN_BOOL osal_op_is_wait_for_signal(P_OSAL_OP pOp);
void osal_op_raise_signal(P_OSAL_OP pOp, int result);
void osal_set_op_result(P_OSAL_OP pOp, int result);
void osal_opq_dump(const char *qName, P_OSAL_OP_Q pOpQ);
void osal_opq_dump_locked(const char *qName, P_OSAL_OP_Q pOpQ);
MTK_CONN_BOOL osal_opq_has_op(P_OSAL_OP_Q pOpQ, P_OSAL_OP pOp);
int osal_ftrace_print(const char *str, ...);
int osal_ftrace_print_ctrl(int flag);
void osal_dump_thread_state(const unsigned char *name);
void osal_op_history_init(struct osal_op_history *log_history, int queue_size);
void osal_op_history_save(struct osal_op_history *log_history, P_OSAL_OP pOp);
void osal_op_history_print(struct osal_op_history *log_history, char *name);
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _OSAL_H_ */

View File

@ -0,0 +1,95 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
#ifndef _RING_H_
#define _RING_H_
struct ring {
/* addr where ring buffer starts */
void *base;
/* addr storing the next writable pos, guaranteed to be >= read except when write overflow, but it's ok. */
unsigned int write;
/* addr storing the next readable pos, except when read == write as buffer empty */
unsigned int read;
/* must be power of 2 */
unsigned int max_size;
};
struct ring_segment {
/* addr points into ring buffer for read/write */
void *ring_pt;
/* size to read/write */
unsigned int sz;
/* pos in external data buffer to read/write */
unsigned int data_pos;
/* the size to be read/write after this segment completed */
unsigned int remain;
};
void ring_init(void *base, unsigned int max_size, unsigned int read,
unsigned int write, struct ring *ring);
unsigned int ring_read_prepare(unsigned int sz, struct ring_segment *seg, struct ring *ring);
#define ring_read_all_prepare(seg, ring) ring_read_prepare((ring)->max_size, seg, ring)
unsigned int ring_write_prepare(unsigned int sz, struct ring_segment *seg, struct ring *ring);
unsigned int ring_overwrite_prepare(unsigned int sz,
struct ring_segment *seg, struct ring *ring);
/* making sure max_size is power of 2 */
#define RING_VALIDATE_SIZE(max_size) WARN_ON(!max_size || (max_size & (max_size - 1)))
#define RING_EMPTY(ring) ((ring)->read == (ring)->write)
/* equation works even when write overflow */
#define RING_SIZE(ring) ((ring)->write - (ring)->read)
#define RING_FULL(ring) (RING_SIZE(ring) == (ring)->max_size)
#define RING_WRITE_REMAIN_SIZE(ring) ((ring)->max_size - RING_SIZE(ring))
#define RING_READ_FOR_EACH(_sz, _seg, _ring) \
for (ring_read_prepare(_sz, &(_seg), _ring), \
_ring_segment_prepare((_ring)->read, &(_seg), (_ring)); \
(_seg).sz > 0; \
_ring_read_commit(&(_seg), (_ring)), _ring_segment_prepare((_ring)->read, \
&(_seg), (_ring)))
#define RING_READ_ALL_FOR_EACH(seg, ring) RING_READ_FOR_EACH((ring)->max_size, seg, ring)
#define RING_READ_FOR_EACH_ITEM(_sz, _seg, _ring) \
for (ring_read_prepare(_sz, &(_seg), _ring), \
_ring_segment_prepare_item((_ring)->read, &(_seg), (_ring)); \
(_seg).sz > 0; \
_ring_read_commit(&(_seg), (_ring)), _ring_segment_prepare_item((_ring)->read, \
&(_seg), (_ring)))
#define RING_WRITE_FOR_EACH(_sz, _seg, _ring) \
for (ring_write_prepare(_sz, &(_seg), _ring),\
_ring_segment_prepare((_ring)->write, &(_seg), (_ring)); \
(_seg).sz > 0; \
_ring_write_commit(&(_seg), (_ring)), _ring_segment_prepare((_ring)->write, \
&(_seg), (_ring)))
#define RING_OVERWRITE_FOR_EACH(_sz, _seg, _ring) \
for (ring_overwrite_prepare(_sz, &(_seg), _ring), \
_ring_segment_prepare((_ring)->write, &(_seg), (_ring)); \
(_seg).sz > 0; \
_ring_write_commit(&(_seg), (_ring)), _ring_segment_prepare((_ring)->write, \
&(_seg), (_ring)))
void ring_dump(const char *title, struct ring *ring);
void ring_dump_segment(const char *title, struct ring_segment *seg);
/* ring Buffer Internal API */
void _ring_segment_prepare(unsigned int from, struct ring_segment *seg, struct ring *ring);
void _ring_segment_prepare_item(unsigned int from, struct ring_segment *seg, struct ring *ring);
void _ring_read_commit(struct ring_segment *seg, struct ring *ring);
void _ring_write_commit(struct ring_segment *seg, struct ring *ring);
#endif

View File

@ -0,0 +1,716 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/delay.h>
#include "msg_thread.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
static void msg_opq_dump(const char *qName, struct msg_op_q *op_q);
static void _msg_opq_dump(const char *qName, struct msg_op_q *op_q);
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#define MSG_OP_SIZE(prb) ((prb)->size)
#define MSG_OP_MASK(prb) (MSG_OP_SIZE(prb) - 1)
#define MSG_OP_COUNT(prb) ((prb)->write - (prb)->read)
#define MSG_OP_FULL(prb) (MSG_OP_COUNT(prb) >= MSG_OP_SIZE(prb))
#define MSG_OP_EMPTY(prb) ((prb)->write == (prb)->read)
#define MSG_OP_INIT(prb, qsize) \
do { \
(prb)->read = (prb)->write = 0; \
(prb)->size = (qsize); \
} while (0)
#define MSG_OP_PUT(prb, value) \
do { \
if (!MSG_OP_FULL(prb)) { \
(prb)->queue[(prb)->write & MSG_OP_MASK(prb)] = value; \
++((prb)->write); \
} \
else { \
pr_warn("Message queue is full.\n"); \
} \
} while (0)
#define MSG_OP_GET(prb, value) \
do { \
if (!MSG_OP_EMPTY(prb)) { \
value = (prb)->queue[(prb)->read & MSG_OP_MASK(prb)]; \
++((prb)->read); \
if (MSG_OP_EMPTY(prb)) { \
(prb)->read = (prb)->write = 0; \
} \
} \
else { \
value = NULL; \
pr_warn("Message queue is empty.\n"); \
} \
} while (0)
#if defined(CONFIG_MTK_ENG_BUILD) || defined(CONFIG_MT_ENG_BUILD)
static bool msg_evt_opq_has_op(struct msg_op_q *op_q, struct msg_op *op)
{
unsigned int rd;
unsigned int wt;
struct msg_op *tmp_op;
rd = op_q->read;
wt = op_q->write;
while (rd != wt) {
tmp_op = op_q->queue[rd & MSG_OP_MASK(op_q)];
if (op == tmp_op)
return true;
rd++;
}
return false;
}
#endif
/*
* Utility functions
*/
static int msg_evt_put_op_to_q(struct msg_op_q *op_q, struct msg_op *op)
{
int ret;
if (!op_q || !op) {
pr_err("invalid input param: pOpQ(0x%p), pLxOp(0x%p)\n", op_q, op);
return -1;
}
ret = osal_lock_sleepable_lock(&op_q->lock);
if (ret) {
pr_warn("osal_lock_sleepable_lock iRet(%d)\n", ret);
return -2;
}
#if defined(CONFIG_MTK_ENG_BUILD) || defined(CONFIG_MT_ENG_BUILD)
if (msg_evt_opq_has_op(op_q, op)) {
pr_err("Op(%p) already exists in queue(%p)\n", op, op_q);
ret = -3;
}
#endif
/* acquire lock success */
if (!MSG_OP_FULL(op_q))
MSG_OP_PUT(op_q, op);
else {
pr_warn("MSG_OP_FULL(%p -> %p)\n", op, op_q);
ret = -4;
}
osal_unlock_sleepable_lock(&op_q->lock);
if (ret) {
//osal_opq_dump("FreeOpQ", &g_conninfra_ctx.rFreeOpQ);
//osal_opq_dump("ActiveOpQ", &g_conninfra_ctx.rActiveOpQ);
return ret;
}
return 0;
}
/*
* Utility functions
*/
static struct msg_op *msg_evt_get_op_from_q(struct msg_op_q *op_q)
{
struct msg_op *op;
int ret;
if (op_q == NULL) {
pr_err("pOpQ = NULL\n");
return NULL;
}
ret = osal_lock_sleepable_lock(&op_q->lock);
if (ret) {
pr_err("osal_lock_sleepable_lock iRet(%d)\n", ret);
return NULL;
}
/* acquire lock success */
MSG_OP_GET(op_q, op);
osal_unlock_sleepable_lock(&op_q->lock);
if (op == NULL) {
pr_warn("MSG_OP_GET(%p) return NULL\n", op_q);
//osal_opq_dump("FreeOpQ", &g_conninfra_ctx.rFreeOpQ);
//osal_opq_dump("ActiveOpQ", &g_conninfra_ctx.rActiveOpQ);
}
return op;
}
static void _msg_opq_dump(const char *qName, struct msg_op_q *op_q)
{
/* Line format:
* [LogicalIdx(PhysicalIdx)]Address:OpId(Ref)(Result)-Info-OpData0,OpData1,OpData2,OpData3,OpData5_
* [LogicalIdx] max 10+2=12 chars (decimal)
* (PhysicalIdx) max 10+2=12 chars (decimal)
* Address: max 16+1=17 chars (hex)
* OpId max 10 chars (decimal)
* (Ref) max 2+2=4 chars (should only be 1 digit, reserve 2 in case of negative number)
* (Result) max 11+2=13 chars (signed decimal)
* -Info- max 8+2=10 chars (hex)
* OpData, max 16+1=17 chars (hex)
*/
#define OPQ_DUMP_OP_PER_LINE 1
#define OPQ_DUMP_OPDATA_PER_OP 6
#define OPQ_DUMP_OP_BUF_SIZE (12 + 12 + 17 + 10 + 4 + 13 + 10 + (17 * (OPQ_DUMP_OPDATA_PER_OP)) + 1)
#define OPQ_DUMP_LINE_BUF_SIZE ((OPQ_DUMP_OP_BUF_SIZE * OPQ_DUMP_OP_PER_LINE) + 1)
unsigned int rd;
unsigned int wt;
unsigned int idx = 0;
unsigned int op_data_idx;
unsigned int buf_idx;
int printed;
struct msg_op *op;
char buf[OPQ_DUMP_LINE_BUF_SIZE];
rd = op_q->read;
wt = op_q->write;
pr_info("%s(%p), sz:%u/%u, rd:%u, wt:%u\n",
qName, op_q, RB_COUNT(op_q), RB_SIZE(op_q), rd, wt);
while (rd != wt && idx < RB_SIZE(op_q)) {
buf_idx = idx % OPQ_DUMP_OP_PER_LINE;
op = op_q->queue[rd & RB_MASK(op_q)];
if (buf_idx == 0) {
printed = 0;
buf[0] = 0;
}
if (op) {
printed += snprintf(buf + printed, OPQ_DUMP_LINE_BUF_SIZE - printed,
"[%u(%u)]%p:%u(%d)(%d)-%u-",
idx,
(rd & RB_MASK(op_q)),
op,
op->op.op_id,
atomic_read(&op->ref_count),
op->result,
op->op.info_bit);
for (op_data_idx = 0; op_data_idx < OPQ_DUMP_OPDATA_PER_OP; op_data_idx++)
printed += snprintf(buf + printed, OPQ_DUMP_LINE_BUF_SIZE - printed,
"%zx,", op->op.op_data[op_data_idx]);
buf[printed-1] = ' ';
} else {
printed += snprintf(buf + printed, OPQ_DUMP_LINE_BUF_SIZE - printed,
"[%u(%u)]%p ", idx, (rd & RB_MASK(op_q)), op);
}
buf[printed++] = ' ';
if (buf_idx == OPQ_DUMP_OP_PER_LINE - 1 || rd == wt - 1) {
buf[printed - 1] = 0;
pr_info("%s\n", buf);
}
rd++;
idx++;
}
}
void msg_opq_dump(const char *qName, struct msg_op_q *op_q)
{
int err;
err = osal_lock_sleepable_lock(&op_q->lock);
if (err) {
pr_info("Failed to lock queue (%d)\n", err);
return;
}
_msg_opq_dump(qName, op_q);
osal_unlock_sleepable_lock(&op_q->lock);
}
/*
* msg_evt_thread API
*/
int msg_evt_put_op_to_free_queue(struct msg_thread_ctx *ctx, struct msg_op *op)
{
if (msg_evt_put_op_to_q(&ctx->free_op_q, op))
return -1;
return 0;
}
struct msg_op *msg_evt_get_free_op(struct msg_thread_ctx *ctx)
{
struct msg_op *op = NULL;
if (ctx == NULL) {
pr_warn("ctx is null.\n");
return op;
}
op = msg_evt_get_op_from_q(&ctx->free_op_q);
if (op)
osal_memset(op, 0, osal_sizeof(struct msg_op));
return op;
}
int msg_evt_put_op_to_active(struct msg_thread_ctx *ctx, struct msg_op *op)
{
P_OSAL_SIGNAL signal = NULL;
int wait_ret = -1;
int ret = 0;
do {
if (!ctx || !op) {
pr_err("msg_thread_ctx(0x%p), op(0x%p)\n", ctx, op);
break;
}
signal = &op->signal;
if (signal->timeoutValue) {
op->result = -9;
osal_signal_init(signal);
atomic_set(&op->ref_count, 1);
} else
atomic_set(&op->ref_count, 0);
/* Increment ref_count by 1 as wmtd thread will hold a reference also,
* this must be done here instead of on target thread, because
* target thread might not be scheduled until a much later time,
* allowing current thread to decrement ref_count at the end of function,
* putting op back to free queue before target thread has a chance to process.
*/
atomic_inc(&op->ref_count);
/* put to active Q */
ret = msg_evt_put_op_to_q(&ctx->active_op_q, op);
if (ret) {
pr_warn("put to active queue fail\n");
atomic_dec(&op->ref_count);
break;
}
/* wake up conninfra_cored */
osal_trigger_event(&ctx->evt);
if (signal->timeoutValue == 0) {
//ret = -1;
/* Not set timeout, don't wait */
/* pr_info("[%s] timeout is zero", __func__);*/
break;
}
/* check result */
wait_ret = osal_wait_for_signal_timeout(signal, &ctx->thread);
/*pr_info("osal_wait_for_signal_timeout:%d result=[%d]\n",
wait_ret, op->result);*/
if (wait_ret == 0)
pr_warn("opId(%d) completion timeout\n", op->op.op_id);
else if (op->result)
pr_info("opId(%d) result:%d\n",
op->op.op_id, op->result);
/* op completes, check result */
ret = op->result;
} while (0);
if (op != NULL && signal != NULL && signal->timeoutValue &&
atomic_dec_and_test(&op->ref_count)) {
/* put Op back to freeQ */
msg_evt_put_op_to_free_queue(ctx, op);
}
return ret;
}
int msg_thread_send(struct msg_thread_ctx *ctx, int opid)
{
return msg_thread_send_2(ctx, opid, 0, 0);
}
int msg_thread_send_1(struct msg_thread_ctx *ctx, int opid,
size_t param1)
{
return msg_thread_send_2(ctx, opid, param1, 0);
}
int msg_thread_send_2(struct msg_thread_ctx *ctx, int opid,
size_t param1, size_t param2)
{
struct msg_op *op = NULL;
P_OSAL_SIGNAL signal;
int ret;
op = msg_evt_get_free_op(ctx);
if (!op) {
pr_err("[%s] can't get free op\n", __func__);
return -1;
}
op->op.op_id = opid;
op->op.op_data[0] = param1;
op->op.op_data[1] = param2;
signal = &op->signal;
//signal->timeoutValue = timeout > 0 ? timeout : MSG_OP_TIMEOUT;
signal->timeoutValue = 0;
ret = msg_evt_put_op_to_active(ctx, op);
return ret;
}
int msg_thread_send_wait(struct msg_thread_ctx *ctx, int opid,
int timeout)
{
return msg_thread_send_wait_3(ctx, opid, timeout, 0, 0, 0);
}
int msg_thread_send_wait_1(struct msg_thread_ctx *ctx,
int opid, int timeout,
size_t param1)
{
return msg_thread_send_wait_3(ctx, opid, timeout, param1, 0, 0);
}
int msg_thread_send_wait_2(struct msg_thread_ctx *ctx,
int opid, int timeout,
size_t param1,
size_t param2)
{
return msg_thread_send_wait_3(ctx, opid, timeout, param1, param2, 0);
}
int msg_thread_send_wait_3(struct msg_thread_ctx *ctx,
int opid, int timeout,
size_t param1,
size_t param2,
size_t param3)
{
struct msg_op *op = NULL;
P_OSAL_SIGNAL signal;
int ret;
op = msg_evt_get_free_op(ctx);
if (!op) {
pr_err("can't get free op for 0x%x\n", opid);
return -1;
}
op->op.op_id = opid;
op->op.op_data[0] = param1;
op->op.op_data[1] = param2;
op->op.op_data[2] = param3;
signal = &op->signal;
signal->timeoutValue = timeout > 0 ? timeout : MSG_OP_TIMEOUT;
ret = msg_evt_put_op_to_active(ctx, op);
return ret;
}
void msg_op_history_save(struct osal_op_history *log_history, struct msg_op *op)
{
struct osal_op_history_entry *entry = NULL;
struct ring_segment seg;
int index;
unsigned long long sec = 0;
unsigned long usec = 0;
unsigned long flags;
if (log_history->queue == NULL)
return;
osal_get_local_time(&sec, &usec);
spin_lock_irqsave(&(log_history->lock), flags);
RING_OVERWRITE_FOR_EACH(1, seg, &log_history->ring_buffer) {
index = seg.ring_pt - log_history->ring_buffer.base;
entry = &log_history->queue[index];
}
if (entry == NULL) {
pr_info("Entry is null, size %d\n",
RING_SIZE(&log_history->ring_buffer));
spin_unlock_irqrestore(&(log_history->lock), flags);
return;
}
entry->opbuf_address = op;
entry->op_id = op->op.op_id;
entry->opbuf_ref_count = atomic_read(&op->ref_count);
entry->op_info_bit = op->op.info_bit;
entry->param_0 = op->op.op_data[0];
entry->param_1 = op->op.op_data[1];
entry->param_2 = op->op.op_data[2];
entry->param_3 = op->op.op_data[3];
entry->ts = sec;
entry->usec = usec;
spin_unlock_irqrestore(&(log_history->lock), flags);
}
unsigned int msg_evt_wait_event_checker(P_OSAL_THREAD thread)
{
struct msg_thread_ctx *ctx = NULL;
if (thread) {
ctx = (struct msg_thread_ctx *) (thread->pThreadData);
return !MSG_OP_EMPTY(&ctx->active_op_q);
}
return 0;
}
int msg_evt_set_current_op(struct msg_thread_ctx *ctx, struct msg_op *op)
{
ctx->cur_op = op;
return 0;
}
int msg_evt_opid_handler(struct msg_thread_ctx *ctx, struct msg_op_data *op)
{
int opid, ret;
/*sanity check */
if (op == NULL) {
pr_warn("null op\n");
return -1;
}
if (ctx == NULL) {
pr_warn("null evt thread ctx\n");
return -2;
}
opid = op->op_id;
if (opid >= ctx->op_func_size) {
pr_err("msg_evt_thread invalid OPID(%d)\n", opid);
return -3;
}
if (ctx->op_func[opid] == NULL) {
pr_err("null handler (%d)\n", opid);
return -4;
}
ret = (*(ctx->op_func[opid])) (op);
return ret;
}
static int msg_evt_thread(void *pvData)
{
struct msg_thread_ctx *ctx = (struct msg_thread_ctx *)pvData;
P_OSAL_EVENT evt = NULL;
struct msg_op *op;
int ret;
if (ctx == NULL) {
pr_err("msg_evt_thread (NULL)\n");
return -1;
}
evt = &(ctx->evt);
for (;;) {
op = NULL;
evt->timeoutValue = 0;
osal_thread_wait_for_event(&ctx->thread, evt, msg_evt_wait_event_checker);
if (osal_thread_should_stop(&ctx->thread)) {
pr_info("msg_evt_thread thread should stop now...\n");
/* TODO: clean up active opQ */
break;
}
/* get Op from activeQ */
op = msg_evt_get_op_from_q(&ctx->active_op_q);
if (!op) {
pr_warn("get op from activeQ fail\n");
continue;
}
/* TODO: save op history */
msg_op_history_save(&ctx->op_history, op);
msg_evt_set_current_op(ctx, op);
ret = msg_evt_opid_handler(ctx, &op->op);
msg_evt_set_current_op(ctx, NULL);
if (ret)
pr_warn("opid (0x%x) failed, ret(%d)\n",
op->op.op_id, ret);
if (atomic_dec_and_test(&op->ref_count)) {
/* msg_evt_free_op(ctx) */
msg_evt_put_op_to_free_queue(ctx, op);
} else if (op->signal.timeoutValue) {
op->result = ret;
osal_raise_signal(&op->signal);
}
}
pr_debug("msg evt thread exists\n");
return 0;
}
int msg_thread_dump(struct msg_thread_ctx *ctx)
{
P_OSAL_THREAD p_thread;
struct msg_op *cur_op;
if (ctx == NULL) {
pr_err("get NULL input\n");
return 0;
}
p_thread = &ctx->thread;
pr_info("Dump msg_thread_ctx: %s\n", p_thread->threadName);
cur_op = ctx->cur_op;
if (cur_op) {
pr_info("cur_op: %x(%x)-%zx,%zx,%zx,%zx\n",
cur_op->op.op_id, cur_op->op.info_bit,
cur_op->op.op_data[0], cur_op->op.op_data[1],
cur_op->op.op_data[2], cur_op->op.op_data[3]);
}
osal_dump_thread_state(p_thread->threadName);
osal_op_history_print(&(ctx->op_history), p_thread->threadName);
msg_opq_dump("ActiveOpQ", &ctx->active_op_q);
return 0;
}
int msg_thread_init(struct msg_thread_ctx *ctx,
const char *thread_name, const msg_opid_func *funcs,
int op_size)
{
int r = 0, i;
P_OSAL_THREAD p_thread;
osal_memset(ctx, 0, sizeof(struct msg_thread_ctx));
ctx->op_func = funcs;
ctx->op_func_size = op_size;
/* init thread inst */
p_thread = &ctx->thread;
osal_strncpy(p_thread->threadName, thread_name,
sizeof(p_thread->threadName));
p_thread->pThreadData = (void *) ctx;
p_thread->pThreadFunc = (void *) msg_evt_thread;
r = osal_thread_create(p_thread);
if (r) {
pr_err("osal_thread_create(0x%p) fail(%d)\n", p_thread, r);
return -1;
}
osal_event_init(&ctx->evt);
osal_sleepable_lock_init(&ctx->active_op_q.lock);
osal_sleepable_lock_init(&ctx->free_op_q.lock);
/* Initialize op queue */
MSG_OP_INIT(&ctx->free_op_q, MSG_THREAD_OP_BUF_SIZE);
MSG_OP_INIT(&ctx->active_op_q, MSG_THREAD_OP_BUF_SIZE);
/* Put all to free Q */
for (i = 0; i < MSG_THREAD_OP_BUF_SIZE; i++) {
osal_signal_init(&(ctx->op_q_inst[i].signal));
msg_evt_put_op_to_free_queue(ctx, &(ctx->op_q_inst[i]));
}
osal_op_history_init(&ctx->op_history, 16);
r = osal_thread_run(p_thread);
if (r) {
pr_err("osal_thread_run(evt_thread 0x%p) fail(%d)\n",
p_thread, r);
return -2;
}
return r;
}
int msg_thread_deinit(struct msg_thread_ctx *ctx)
{
int r, i;
P_OSAL_THREAD p_thraed = &ctx->thread;
r = osal_thread_stop(p_thraed);
if (r) {
pr_err("osal_thread_stop(0x%p) fail(%d)\n", p_thraed, r);
return -1;
}
for (i = 0; i < MSG_THREAD_OP_BUF_SIZE; i++)
osal_signal_deinit(&(ctx->op_q_inst[i].signal));
osal_sleepable_lock_deinit(&ctx->free_op_q.lock);
osal_sleepable_lock_deinit(&ctx->active_op_q.lock);
r = osal_thread_destroy(p_thraed);
if (r) {
pr_err("osal_thread_stop(0x%p) fail(%d)\n", p_thraed, r);
return -2;
}
osal_memset(ctx, 0, sizeof(struct msg_thread_ctx));
pr_debug("[%s] DONE\n", __func__);
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,150 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
#include "ring.h"
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/bug.h>
void ring_init(void *base, unsigned int max_size, unsigned int read,
unsigned int write, struct ring *ring)
{
WARN_ON(!base);
/* making sure max_size is power of 2 */
WARN_ON(!max_size || (max_size & (max_size - 1)));
/* making sure write largger than read */
WARN_ON(read > write);
ring->base = base;
ring->read = read;
ring->write = write;
ring->max_size = max_size;
}
void ring_dump(const char *title, struct ring *ring)
{
pr_info("[%s] ring:{write=%d, read=%d, max_size=%d}\n",
title, ring->write, ring->read, ring->max_size);
}
void ring_dump_segment(const char *title, struct ring_segment *seg)
{
pr_info("[%s] seg:{ring_pt=0x%p, data_pos=%d, sz=%d, remain=%d}\n",
title, seg->ring_pt, seg->data_pos,
seg->sz, seg->remain);
}
/*
* Function prepares the ring_segment and
* returns the number of valid bytes for read.
*/
unsigned int ring_read_prepare(unsigned int sz,
struct ring_segment *seg,
struct ring *ring)
{
unsigned int wt = ring->write;
unsigned int rd = ring->read;
memset(seg, 0, sizeof(struct ring_segment));
if (sz > wt - rd)
sz = wt - rd;
seg->remain = sz;
/* ring_dump(__func__, ring); */
/* ring_dump_segment(__func__, seg); */
return seg->remain;
}
/*
* Function prepares the ring_segment and
* returns the number of bytes available for write.
*/
unsigned int ring_write_prepare(unsigned int sz,
struct ring_segment *seg,
struct ring *ring)
{
unsigned int wt = ring->write;
unsigned int rd = ring->read;
memset(seg, 0, sizeof(struct ring_segment));
if (sz > ring->max_size - (wt - rd))
sz = ring->max_size - (wt - rd);
seg->remain = sz;
/* ring_dump(__func__, ring); */
/* ring_dump_segment(__func__, seg); */
return seg->remain;
}
unsigned int ring_overwrite_prepare(unsigned int sz, struct ring_segment *seg,
struct ring *ring)
{
unsigned int wt = ring->write;
unsigned int rd = ring->read;
memset(seg, 0, sizeof(struct ring_segment));
if (sz > ring->max_size - (wt - rd))
ring->read += sz - (ring->max_size - (wt - rd));
seg->remain = sz;
/* ring_dump(__func__, ring); */
/* ring_dump_segment(__func__, seg); */
return seg->remain;
}
void __ring_segment_prepare(unsigned int from, unsigned int sz,
struct ring_segment *seg,
struct ring *ring)
{
unsigned int ring_pos = from & (ring->max_size - 1);
seg->ring_pt = ring->base + ring_pos;
seg->data_pos = (seg->sz ? seg->data_pos + seg->sz : 0);
if (ring_pos + sz <= ring->max_size)
seg->sz = sz;
else
seg->sz = ring->max_size - ring_pos;
seg->remain -= seg->sz;
/* ring_dump(__func__, ring); */
/* ring_dump_segment(__func__, seg); */
}
void _ring_segment_prepare(unsigned int from,
struct ring_segment *seg,
struct ring *ring)
{
__ring_segment_prepare(from, seg->remain, seg, ring);
}
void _ring_segment_prepare_item(unsigned int from,
struct ring_segment *seg,
struct ring *ring)
{
unsigned int size;
size = (seg->remain ? 1 : 0);
__ring_segment_prepare(from, size, seg, ring);
}
void _ring_read_commit(struct ring_segment *seg, struct ring *ring)
{
ring->read += seg->sz;
/* ring_dump(__func__, ring); */
/* ring_dump_segment(__func__, seg); */
}
void _ring_write_commit(struct ring_segment *seg, struct ring *ring)
{
ring->write += seg->sz;
/* ring_dump(__func__, ring); */
/* ring_dump_segment(__func__, seg); */
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,193 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _CONNINFRA_CORE_H_
#define _CONNINFRA_CORE_H_
#include <linux/semaphore.h>
#include <linux/platform_device.h>
#include <linux/workqueue.h>
#include <linux/time.h>
#include "osal.h"
#include "msg_thread.h"
#include "conninfra.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define CHIP_RST_REASON_MAX_LEN 128
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
typedef enum _ENUM_DRV_STS_ {
DRV_STS_POWER_OFF = 0, /* initial state */
DRV_STS_POWER_ON = 1, /* powered on */
DRV_STS_MAX
} ENUM_DRV_STS, *P_ENUM_DRV_STS;
enum chip_rst_status {
CHIP_RST_NONE = 0,
CHIP_RST_START = 1,
CHIP_RST_PRE_CB = 2,
CHIP_RST_RESET = 3,
CHIP_RST_POST_CB = 4,
CHIP_RST_DONE = 5
};
struct subsys_drv_inst {
ENUM_DRV_STS drv_status; /* Controlled driver status */
unsigned int rst_state;
struct sub_drv_ops_cb ops_cb;
struct msg_thread_ctx msg_ctx;
};
/*
* state of conninfra
*
*/
struct conninfra_ctx {
ENUM_DRV_STS infra_drv_status;
struct subsys_drv_inst drv_inst[CONNDRV_TYPE_MAX];
/*struct spinlock infra_lock;*/
spinlock_t infra_lock;
OSAL_SLEEPABLE_LOCK core_lock;
/* chip reset */
enum chip_rst_status rst_status;
spinlock_t rst_lock;
struct semaphore rst_sema;
atomic_t rst_state;
enum consys_drv_type trg_drv;
char trg_reason[CHIP_RST_REASON_MAX_LEN];
struct msg_thread_ctx msg_ctx;
struct msg_thread_ctx cb_ctx;
unsigned int hw_ver;
unsigned int fw_ver;
unsigned int ip_ver;
};
//typedef enum _ENUM_CONNINFRA_CORE_OPID_T {
typedef enum {
CONNINFRA_OPID_PWR_ON = 0,
CONNINFRA_OPID_PWR_OFF = 1,
CONNINFRA_OPID_RFSPI_READ = 2,
CONNINFRA_OPID_RFSPI_WRITE = 3,
CONNINFRA_OPID_ADIE_TOP_CK_EN_ON = 4,
CONNINFRA_OPID_ADIE_TOP_CK_EN_OFF = 5,
CONNINFRA_OPID_SPI_CLOCK_SWITCH = 6,
CONNINFRA_OPID_FORCE_CONNINFRA_WAKUP = 7,
CONNINFRA_OPID_FORCE_CONNINFRA_SLEEP = 8,
CONNINFRA_OPID_DUMP_POWER_STATE = 9,
CONNINFRA_OPID_MAX
} conninfra_core_opid;
/* For the operation which may callback subsys driver */
typedef enum {
CONNINFRA_CB_OPID_CHIP_RST = 0,
CONNINFRA_CB_OPID_MAX
} conninfra_core_cb_opid;
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
extern int conninfra_core_init(void);
extern int conninfra_core_deinit(void);
int conninfra_core_power_on(enum consys_drv_type type);
int conninfra_core_power_off(enum consys_drv_type type);
int conninfra_core_lock_rst(void);
int conninfra_core_unlock_rst(void);
int conninfra_core_trg_chip_rst(enum consys_drv_type drv, char *reason);
int conninfra_core_subsys_ops_reg(enum consys_drv_type type, struct sub_drv_ops_cb *cb);
int conninfra_core_subsys_ops_unreg(enum consys_drv_type type);
/* reg control */
/* NOTE: NOT thread-safe
* return value
* 1 : Yes, 0: NO
*/
int conninfra_core_reg_readable(void);
int conninfra_core_reg_readable_no_lock(void);
int conninfra_core_is_bus_hang(void);
int conninfra_core_is_consys_reg(phys_addr_t addr);
int conninfra_core_reg_read(unsigned long address, unsigned int *value, unsigned int mask);
int conninfra_core_reg_write(unsigned long address, unsigned int value, unsigned int mask);
int conninfra_core_is_rst_locking(void);
int conninfra_core_spi_read(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int *data);
int conninfra_core_spi_write(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int data);
int conninfra_core_adie_top_ck_en_on(enum consys_drv_type type);
int conninfra_core_adie_top_ck_en_off(enum consys_drv_type type);
int conninfra_core_force_conninfra_wakeup(void);
int conninfra_core_force_conninfra_sleep(void);
int conninfra_core_spi_clock_switch(enum connsys_spi_speed_type type);
int conninfra_core_dump_power_state(void);
int conninfra_core_pmic_event_cb(unsigned int, unsigned int);
int conninfra_core_debug_dump(void);
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _CONNINFRA_CORE_H_ */

View File

@ -0,0 +1,216 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _CONNINFRA_H_
#define _CONNINFRA_H_
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define AIDE_NUM_MAX 2
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
enum consys_drv_type {
CONNDRV_TYPE_BT = 0,
CONNDRV_TYPE_FM = 1,
CONNDRV_TYPE_GPS = 2,
CONNDRV_TYPE_WIFI = 3,
CONNDRV_TYPE_CONNINFRA = 4,
CONNDRV_TYPE_MAX
};
/* HW-specific, need sync with FW. DO NOT MODIFY */
enum sys_spi_subsystem
{
SYS_SPI_WF1 = 0x00,
SYS_SPI_WF = 0x01,
SYS_SPI_BT = 0x02,
SYS_SPI_FM = 0x03,
SYS_SPI_GPS = 0x04,
SYS_SPI_TOP = 0x05,
SYS_SPI_WF2 = 0x06,
SYS_SPI_WF3 = 0x07,
SYS_SPI_2ND_ADIE_WF1 = 0x10,
SYS_SPI_2ND_ADIE_WF = 0x11,
SYS_SPI_2ND_ADIE_BT = 0x12,
SYS_SPI_2ND_ADIE_FM = 0x13,
SYS_SPI_2ND_ADIE_GPS = 0x14,
SYS_SPI_2ND_ADIE_TOP = 0x15,
SYS_SPI_2ND_ADIE_WF2 = 0x16,
SYS_SPI_2ND_ADIE_WF3 = 0x17,
SYS_SPI_MAX
};
enum connsys_spi_speed_type {
CONNSYS_SPI_SPEED_26M,
CONNSYS_SPI_SPEED_64M,
CONNSYS_SPI_SPEED_MAX
};
/* Conninfra driver allocate EMI for FW and WFDAM
* (FW includes: BT, WIFI and their MCU)
* +-----------+ +
* | | |
* | FW | |
* | | |
* +-----------+ v
* | |
* | | FW_WFDMA
* | | ^
* | WFDMA | |
* | | |
* | | |
* +-----------+ +
*
* MCIF region is provided by MD
* +-----------+
* | |
* | |
* | MCIF |
* | |
* +-----------+
*/
enum connsys_emi_type
{
CONNSYS_EMI_FW = 0,
CONNSYS_EMI_MAX,
};
#define CONNINFRA_SPI_OP_FAIL 0x1
#define CONNINFRA_CB_RET_CAL_PASS_POWER_OFF 0x0
#define CONNINFRA_CB_RET_CAL_PASS_POWER_ON 0x2
#define CONNINFRA_CB_RET_CAL_FAIL_POWER_OFF 0x1
#define CONNINFRA_CB_RET_CAL_FAIL_POWER_ON 0x3
#define CONNINFRA_BUS_CLOCK_WPLL 0x1
#define CONNINFRA_BUS_CLOCK_ALL (CONNINFRA_BUS_CLOCK_WPLL)
/* bus hang error define */
#define CONNINFRA_INFRA_BUS_HANG 0x1
#define CONNINFRA_AP2CONN_RX_SLP_PROT_ERR 0x2
#define CONNINFRA_AP2CONN_TX_SLP_PROT_ERR 0x4
#define CONNINFRA_AP2CONN_CLK_ERR 0x8
#define CONNINFRA_INFRA_BUS_HANG_IRQ 0x10
#define CONNINFRA_ERR_RST_ONGOING -0x7788
#define CONNINFRA_ERR_WAKEUP_FAIL -0x5566
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/* SPI clock switch */
int conninfra_spi_clock_switch(enum connsys_spi_speed_type type);
/* A-die top_ck_en control, only for MT6885 */
int conninfra_adie_top_ck_en_on(enum consys_drv_type type);
int conninfra_adie_top_ck_en_off(enum consys_drv_type type);
/* RFSPI */
int conninfra_spi_read(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int *data);
int conninfra_spi_write(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int data);
/* EMI */
void conninfra_get_emi_phy_addr(enum connsys_emi_type type, phys_addr_t* base, unsigned int *size);
/* power on/off */
int conninfra_pwr_on(enum consys_drv_type drv_type);
int conninfra_pwr_off(enum consys_drv_type drv_type);
/* To setup config relative data, ex: debug flag */
void conninfra_config_setup(void);
/*
* 0 : NO hang
* > 0 : HANG!!
* CONNINFRA_ERR_RST_ONGOING: whole chip reset is ongoing
*/
int conninfra_is_bus_hang(void);
/* chip reset
* return:
* <0: error
* =0: triggered
* =1: ongoing
*/
int conninfra_trigger_whole_chip_rst(enum consys_drv_type drv, char *reason);
int conninfra_debug_dump(void);
struct whole_chip_rst_cb {
int (*pre_whole_chip_rst)(enum consys_drv_type drv, char *reason);
int (*post_whole_chip_rst)(void);
};
/* driver state query */
/* VCN control */
/* Thermal */
/* Config */
/* semaphore */
/* calibration */
struct sub_drv_ops_cb {
/* chip reset */
struct whole_chip_rst_cb rst_cb;
};
int conninfra_sub_drv_ops_register(enum consys_drv_type drv_type, struct sub_drv_ops_cb *cb);
int conninfra_sub_drv_ops_unregister(enum consys_drv_type drv_type);
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _CONNINFRA_H_ */

View File

@ -0,0 +1,663 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/delay.h>
#include <linux/of_device.h>
#include <linux/of_reserved_mem.h>
#include "osal.h"
#include "consys_hw.h"
#include "emi_mng.h"
#include "pmic_mng.h"
#include "consys_reg_mng.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
static int mtk_conninfra_probe(struct platform_device *pdev);
static int mtk_conninfra_remove(struct platform_device *pdev);
static int mtk_conninfra_suspend(struct platform_device *pdev, pm_message_t state);
static int mtk_conninfra_resume(struct platform_device *pdev);
static int consys_hw_init(struct platform_device *pdev);
static int consys_hw_deinit(void);
static int _consys_hw_conninfra_wakeup(void);
static int _consys_hw_conninfra_sleep(void);
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
extern const struct of_device_id apconninfra_of_ids[];
static struct platform_driver mtk_conninfra_dev_drv = {
.probe = mtk_conninfra_probe,
.remove = mtk_conninfra_remove,
.suspend = mtk_conninfra_suspend,
.resume = mtk_conninfra_resume,
.driver = {
.name = "mtk_conninfra",
.owner = THIS_MODULE,
.of_match_table = apconninfra_of_ids,
},
};
struct consys_hw_env conn_hw_env[AIDE_NUM_MAX];
const struct consys_hw_ops_struct *consys_hw_ops;
struct platform_device *g_pdev;
int g_conninfra_wakeup_ref_cnt;
struct work_struct ap_resume_work;
struct conninfra_dev_cb *g_conninfra_dev_cb;
const struct conninfra_plat_data *g_conninfra_plat_data = NULL;
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
struct platform_device *get_consys_device(void)
{
return g_pdev;
}
int consys_hw_get_clock_schematic(void)
{
if (consys_hw_ops->consys_plt_co_clock_type)
return consys_hw_ops->consys_plt_co_clock_type();
else
pr_err("consys_hw_ops->consys_co_clock_type not supported\n");
return -1;
}
unsigned int consys_hw_chipid_get(void)
{
if (g_conninfra_plat_data && g_conninfra_plat_data->chip_id)
return g_conninfra_plat_data->chip_id;
else if (consys_hw_ops->consys_plt_soc_chipid_get)
return consys_hw_ops->consys_plt_soc_chipid_get();
else
pr_err("consys_plt_soc_chipid_get not supported\n");
return 0;
}
unsigned int consys_hw_get_hw_ver(void)
{
if (consys_hw_ops->consys_plt_get_hw_ver)
return consys_hw_ops->consys_plt_get_hw_ver();
return 0;
}
int consys_hw_reg_readable(void)
{
return consys_reg_mng_reg_readable();
}
int consys_hw_is_connsys_reg(phys_addr_t addr)
{
return consys_reg_mng_is_connsys_reg(addr);
}
int consys_hw_is_bus_hang(void)
{
return consys_reg_mng_is_bus_hang();
}
int consys_hw_dump_bus_status(void)
{
return consys_reg_mng_dump_bus_status();
}
int consys_hw_dump_cpupcr(enum conn_dump_cpupcr_type dump_type, int times, unsigned long interval_us)
{
return consys_reg_mng_dump_cpupcr(dump_type, times, interval_us);
}
int consys_hw_pwr_on(unsigned int curr_status, unsigned int on_radio)
{
//unsigned int next_status = (curr_status | (0x1 << on_radio));
/* first power on */
if (curr_status == 0) {
/* POS PART 0:
* Set PMIC to turn on the power that AFE WBG circuit in D-die,
* OSC or crystal component, and A-die need.
*/
if (consys_hw_ops->consys_plt_xtal_ctrl_fast_mode)
consys_hw_ops->consys_plt_xtal_ctrl_fast_mode();
if (consys_hw_ops->consys_plt_connsys_sw_reset_ctrl)
consys_hw_ops->consys_plt_connsys_sw_reset_ctrl(false);
/* POS PART 1:
* 1. Pinmux setting
* 2. Turn on MTCMOS
* 3. Enable AHB bus
*/
if (consys_hw_ops->consys_plt_set_if_pinmux)
consys_hw_ops->consys_plt_set_if_pinmux(true);
udelay(500);
if (consys_hw_ops->consys_plt_tx_rx_bus_slp_prot_ctrl)
consys_hw_ops->consys_plt_tx_rx_bus_slp_prot_ctrl(true);
if (consys_hw_ops->consys_plt_polling_consys_chipid)
consys_hw_ops->consys_plt_polling_consys_chipid();
/* POS PART 2:
* 1. Set connsys EMI mapping
* 2. d_die_cfg
* 3. spi_master_cfg
* 4. a_die_cfg
* 5. afe_wbg_cal
* 6. patch default value
* 7. CONN_INFRA low power setting (srcclken wait time, mtcmos HW ctl...)
*/
if (consys_hw_ops->consys_plt_bus_clock_ctrl)
consys_hw_ops->consys_plt_bus_clock_ctrl(on_radio, CONNINFRA_BUS_CLOCK_ALL);
emi_mng_set_remapping_reg();
emi_mng_set_region_protection();
if (consys_hw_ops->consys_plt_d_die_cfg)
consys_hw_ops->consys_plt_d_die_cfg();
if (consys_hw_ops->consys_plt_conninfra_sysram_hw_ctrl)
consys_hw_ops->consys_plt_conninfra_sysram_hw_ctrl();
if (consys_hw_ops->consys_plt_spi_master_cfg)
consys_hw_ops->consys_plt_spi_master_cfg();
#ifndef CONFIG_FPGA_EARLY_PORTING
if (consys_hw_ops->consys_plt_adie_type_check)
consys_hw_ops->consys_plt_adie_type_check();
if (consys_hw_ops->consys_plt_a_die_cfg)
consys_hw_ops->consys_plt_a_die_cfg();
#endif
if (consys_hw_ops->consys_plt_afe_wbg_cal)
consys_hw_ops->consys_plt_afe_wbg_cal();
if (consys_hw_ops->consys_plt_subsys_pll_initial)
consys_hw_ops->consys_plt_subsys_pll_initial();
if (consys_hw_ops->consys_plt_osc_legacy_mode)
consys_hw_ops->consys_plt_osc_legacy_mode();
#ifndef CONFIG_FPGA_EARLY_PORTING
if (consys_hw_ops->consys_plt_top_pwr_ctrl)
consys_hw_ops->consys_plt_top_pwr_ctrl();
#endif
if (consys_hw_ops->consys_plt_conn_infra_bus_timeout)
consys_hw_ops->consys_plt_conn_infra_bus_timeout();
if (consys_hw_ops->consys_plt_clkgen_wpll_hw_ctrl)
consys_hw_ops->consys_plt_clkgen_wpll_hw_ctrl();
/* POS PART 3:
* 1. A-die low power setting
* 2. bgfsys power on(BT/GPS on)
*/
consys_hw_force_conninfra_wakeup();
#ifndef CONFIG_FPGA_EARLY_PORTING
consys_hw_adie_top_ck_en_on(on_radio);
//consys_hw_adie_top_ck_en_off(on_radio);
#endif
consys_hw_force_conninfra_sleep();
}else {
switch (on_radio) {
case CONNDRV_TYPE_WIFI:
/* Power on WFSYS PART 0:
* 1. wake up conn_infra
* 2. turn on MTCMOS power switch of "wfsys_top_on" and "wfsys_top_off" circuit in D-die ("wfsys_top_off" is turned on by "wfsys_top_on" automatically)
* 3. enable AHB bus(WF2conn/conn2WF)
* 4. downlad CONNSYS EMI code
* 5. patch default value
*/
if (consys_hw_ops->consys_plt_conninfra_wf_wakeup)
consys_hw_ops->consys_plt_conninfra_wf_wakeup();
if (consys_hw_ops->consys_plt_conn_wmcpu_sw_reset)
consys_hw_ops->consys_plt_conn_wmcpu_sw_reset(true);
if (consys_hw_ops->consys_plt_wf_bus_slp_prot_ctrl)
consys_hw_ops->consys_plt_wf_bus_slp_prot_ctrl(false);
if (consys_hw_ops->consys_plt_wfsys_top_on_ctrl)
consys_hw_ops->consys_plt_wfsys_top_on_ctrl(true);
if (consys_hw_ops->consys_plt_wfsys_bus_slp_prot_check)
consys_hw_ops->consys_plt_wfsys_bus_slp_prot_check(true);
if (consys_hw_ops->consys_plt_wfsys_bus_timeout_ctrl)
consys_hw_ops->consys_plt_wfsys_bus_timeout_ctrl();
if (consys_hw_ops->consys_plt_conn_wmcpu_sw_reset)
consys_hw_ops->consys_plt_conn_wmcpu_sw_reset(false);
#ifndef CONFIG_FPGA_EARLY_PORTING
if (consys_hw_ops->consys_plt_conn_wmcpu_idle_loop_check)
consys_hw_ops->consys_plt_conn_wmcpu_idle_loop_check();
if (consys_hw_ops->consys_plt_adie_type_cfg)
consys_hw_ops->consys_plt_adie_type_cfg();
#endif
/* No sleep requiremenct for rebb AP */
#if 0
if (consys_hw_ops->consys_plt_conninfra_wf_sleep)
consys_hw_ops->consys_plt_conninfra_wf_sleep();
#endif
break;
default:
pr_err("Not support type now (on_radio = %d)\n", on_radio);
break;
}
}
return 0;
}
int consys_hw_pwr_off(unsigned int curr_status, unsigned int off_radio)
{
//int ret = 0;
unsigned int next_status = curr_status & ~(0x1 << off_radio);
if (next_status == 0) {
pr_info("Last pwoer off: %d\n", off_radio);
/* Power off CONNSYS PART 0:
* 1. A-die low power setting
*/
consys_hw_force_conninfra_wakeup();
#ifndef CONFIG_FPGA_EARLY_PORTING
//consys_hw_adie_top_ck_en_off(off_radio);
#endif
consys_hw_force_conninfra_sleep();
/* Power off CONNSYS PART 1:
* 1. disable AXI bus
* 2. turn off MTCMOS power switch of "conn_top_on" and "conn_top_off" circuit in D-die
*/
if (consys_hw_ops->consys_plt_tx_rx_bus_slp_prot_ctrl)
consys_hw_ops->consys_plt_tx_rx_bus_slp_prot_ctrl(false);
if (consys_hw_ops->consys_plt_connsys_sw_reset_ctrl)
consys_hw_ops->consys_plt_connsys_sw_reset_ctrl(true);
udelay(1);
} else {
switch (off_radio) {
case CONNDRV_TYPE_WIFI:
/* Power off WFSYS PART 1:
* 1. disable AXI bus(wf2conn/conn2wf)
* 2. turn off MTCMOS power switch of "wf_top_on" and "wf_top_off" circuit in D-die ("wf_top_off" is turned off by "wf_top_on" automatically)
*/
if (consys_hw_ops->consys_plt_conninfra_wf_wakeup)
consys_hw_ops->consys_plt_conninfra_wf_wakeup();
if (consys_hw_ops->consys_plt_wf_bus_slp_prot_ctrl)
consys_hw_ops->consys_plt_wf_bus_slp_prot_ctrl(true);
if (consys_hw_ops->consys_plt_wfsys_bus_slp_prot_check)
consys_hw_ops->consys_plt_wfsys_bus_slp_prot_check(false);
if (consys_hw_ops->consys_plt_wpll_ctrl)
consys_hw_ops->consys_plt_wpll_ctrl(false);
if (consys_hw_ops->consys_plt_wfsys_top_on_ctrl)
consys_hw_ops->consys_plt_wfsys_top_on_ctrl(false);
if (consys_hw_ops->consys_plt_wpll_ctrl)
consys_hw_ops->consys_plt_wpll_ctrl(true);
consys_hw_adie_top_ck_en_off(off_radio);
if (consys_hw_ops->consys_plt_conninfra_wf_req_clr)
consys_hw_ops->consys_plt_conninfra_wf_req_clr();
if (consys_hw_ops->consys_plt_conninfra_wf_sleep)
consys_hw_ops->consys_plt_conninfra_wf_sleep();
break;
default:
consys_hw_force_conninfra_wakeup();
consys_hw_adie_top_ck_en_off(off_radio);
consys_hw_force_conninfra_sleep();
break;
}
}
return 0;
}
int consys_hw_wifi_power_ctl(unsigned int enable)
{
return pmic_mng_wifi_power_ctrl(enable);
}
int consys_hw_bt_power_ctl(unsigned int enable)
{
return pmic_mng_bt_power_ctrl(enable);
}
int consys_hw_gps_power_ctl(unsigned int enable)
{
return pmic_mng_gps_power_ctrl(enable);
}
int consys_hw_fm_power_ctl(unsigned int enable)
{
return pmic_mng_fm_power_ctrl(enable);
}
int consys_hw_dump_power_state(void)
{
if (consys_hw_ops && consys_hw_ops->consys_plt_power_state)
consys_hw_ops->consys_plt_power_state();
return 0;
}
int consys_hw_spi_read(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int *data)
{
if (consys_hw_ops->consys_plt_spi_read)
return consys_hw_ops->consys_plt_spi_read(subsystem, addr, data);
return -1;
}
int consys_hw_spi_write(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int data)
{
if (consys_hw_ops->consys_plt_spi_write)
return consys_hw_ops->consys_plt_spi_write(subsystem, addr, data);
return -1;
}
int consys_hw_adie_top_ck_en_on(enum consys_drv_type type)
{
if (consys_hw_ops->consys_plt_adie_top_ck_en_on_off_ctrl)
return consys_hw_ops->consys_plt_adie_top_ck_en_on_off_ctrl(type, 1);
return -1;
}
int consys_hw_adie_top_ck_en_off(enum consys_drv_type type)
{
if (consys_hw_ops->consys_plt_adie_top_ck_en_on_off_ctrl)
return consys_hw_ops->consys_plt_adie_top_ck_en_on_off_ctrl(type, 0);
return -1;
}
static int _consys_hw_conninfra_wakeup(void)
{
int ref = g_conninfra_wakeup_ref_cnt;
bool wakeup = false, ret;
if (consys_hw_ops->consys_plt_conninfra_wakeup) {
if (g_conninfra_wakeup_ref_cnt == 0) {
ret = consys_hw_ops->consys_plt_conninfra_wakeup();
if (ret) {
pr_err("wakeup fail!! ret=[%d]\n", ret);
return ret;
}
wakeup = true;
}
g_conninfra_wakeup_ref_cnt++;
}
pr_info("conninfra_wakeup refcnt=[%d]->[%d] %s\n",
ref, g_conninfra_wakeup_ref_cnt, (wakeup ? "wakeup!!" : ""));
return 0;
}
static int _consys_hw_conninfra_sleep(void)
{
int ref = g_conninfra_wakeup_ref_cnt;
bool sleep = false;
if (consys_hw_ops->consys_plt_conninfra_sleep &&
--g_conninfra_wakeup_ref_cnt == 0) {
sleep = true;
consys_hw_ops->consys_plt_conninfra_sleep();
}
if (g_conninfra_wakeup_ref_cnt < 0)
g_conninfra_wakeup_ref_cnt = 0;
pr_info("conninfra_sleep refcnt=[%d]->[%d] %s\n",
ref, g_conninfra_wakeup_ref_cnt, (sleep ? "sleep!!" : ""));
return 0;
}
int consys_hw_force_conninfra_wakeup(void)
{
return _consys_hw_conninfra_wakeup();
}
int consys_hw_force_conninfra_sleep(void)
{
return _consys_hw_conninfra_sleep();
}
int consys_hw_spi_clock_switch(enum connsys_spi_speed_type type)
{
if (consys_hw_ops->consys_plt_spi_clock_switch)
return consys_hw_ops->consys_plt_spi_clock_switch(type);
return -1;
}
int consys_hw_pmic_event_cb(unsigned int id, unsigned int event)
{
pmic_mng_event_cb(id, event);
return 0;
}
int mtk_conninfra_probe(struct platform_device *pdev)
{
int ret = -1;
if (pdev)
g_pdev = pdev;
else {
pr_err("pdev is NULL\n");
return -1;
}
g_conninfra_plat_data = (const struct conninfra_plat_data*)of_device_get_match_data(&pdev->dev);
if (g_conninfra_plat_data == NULL) {
pr_err("Get platform data fail.\n");
return -2;
}
if (consys_hw_ops == NULL)
consys_hw_ops = (const struct consys_hw_ops_struct*)g_conninfra_plat_data->hw_ops;
if (consys_hw_ops == NULL) {
pr_err("Get HW op fail\n");
return -3;
}
/* Read device node */
if (consys_reg_mng_init(pdev, g_conninfra_plat_data) != 0) {
pr_err("consys_plt_read_reg_from_dts fail\n");
return -4;
}
if (consys_hw_ops->consys_plt_clk_get_from_dts) {
if (consys_hw_ops->consys_plt_clk_get_from_dts(pdev) != 0) {
pr_err("consys_plt_clk_get_from_dts fail\n");
return -5;
}
}
/* HW operation init */
if (consys_hw_init(pdev) != 0) {
pr_err("consys_hw_init fail\n");
return -6;
}
/* emi mng init */
ret = emi_mng_init(pdev, g_conninfra_plat_data);
if (ret) {
pr_err("emi_mng init fail, %d\n", ret);
return -7;
}
ret = pmic_mng_init(pdev, g_conninfra_dev_cb, g_conninfra_plat_data);
if (ret) {
pr_err("pmic_mng init fail, %d\n", ret);
return -8;
}
return ret;
}
int mtk_conninfra_remove(struct platform_device *pdev)
{
int ret;
ret = pmic_mng_deinit();
pr_info("pmic_mng_deinit ret=%d\n", ret);
ret = emi_mng_deinit();
pr_info("emi_mng_deinit ret=%d\n", ret);
if (consys_hw_ops->consys_plt_clk_detach)
consys_hw_ops->consys_plt_clk_detach();
else
pr_err("consys_plt_clk_detach is null\n");
ret = consys_reg_mng_deinit();
pr_info("consys_reg_mng_deinit ret=%d\n", ret);
ret = consys_hw_deinit();
pr_info("consys_hw_deinit ret=%d\n", ret);
if (g_pdev)
g_pdev = NULL;
return 0;
}
int mtk_conninfra_suspend(struct platform_device *pdev, pm_message_t state)
{
return 0;
}
int mtk_conninfra_resume(struct platform_device *pdev)
{
/* suspend callback is in atomic context, use schedule work to execute STEP */
schedule_work(&ap_resume_work);
return 0;
}
static void consys_hw_ap_resume_handler(struct work_struct *work)
{
if (g_conninfra_dev_cb && g_conninfra_dev_cb->conninfra_resume_cb)
(*g_conninfra_dev_cb->conninfra_resume_cb)();
}
int consys_hw_init(struct platform_device *pdev)
{
int iRet = 0;
if (consys_hw_ops->consys_plt_hw_init)
iRet = consys_hw_ops->consys_plt_hw_init();
return iRet;
}
int consys_hw_deinit(void)
{
return 0;
}
int mtk_conninfra_drv_init(struct conninfra_dev_cb *dev_cb)
{
int iRet = 0;
g_conninfra_dev_cb = dev_cb;
pr_info("Before platform_driver_register\n");
iRet = platform_driver_register(&mtk_conninfra_dev_drv);
if (iRet)
pr_err("Conninfra platform driver registered failed(%d)\n", iRet);
pr_info("After platform_driver_register\n");
INIT_WORK(&ap_resume_work, consys_hw_ap_resume_handler);
return iRet;
}
int mtk_conninfra_drv_deinit(void)
{
platform_driver_unregister(&mtk_conninfra_dev_drv);
g_conninfra_dev_cb = NULL;
return 0;
}

View File

@ -0,0 +1,39 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2019 MediaTek Inc.
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
#include <linux/of_device.h>
#include "consys_hw.h"
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/* Platform data */
#ifdef CONNINFRA_APSOC_MT7986
extern struct conninfra_plat_data mt7986_plat_data;
const struct of_device_id apconninfra_of_ids[] = {
{
.compatible = "mediatek,mt7986-consys",
.data = (void*)&mt7986_plat_data,
},
{}
};
#endif
#ifdef CONNINFRA_APSOC_MT7981
extern struct conninfra_plat_data mt7981_plat_data;
const struct of_device_id apconninfra_of_ids[] = {
{
.compatible = "mediatek,mt7981-consys",
.data = (void*)&mt7981_plat_data,
},
{}
};
#endif

View File

@ -0,0 +1,148 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include "consys_hw.h"
#include "consys_reg_mng.h"
#include "consys_reg_util.h"
const struct consys_reg_mng_ops* g_consys_reg_ops = NULL;
int consys_reg_mng_reg_readable(void)
{
if (g_consys_reg_ops &&
g_consys_reg_ops->consys_reg_mng_check_reable)
return g_consys_reg_ops->consys_reg_mng_check_reable();
return -1;
}
int consys_reg_mng_is_connsys_reg(phys_addr_t addr)
{
if (g_consys_reg_ops &&
g_consys_reg_ops->consys_reg_mng_is_consys_reg)
return g_consys_reg_ops->consys_reg_mng_is_consys_reg(addr);
return -1;
}
int consys_reg_mng_is_bus_hang(void)
{
if (g_consys_reg_ops &&
g_consys_reg_ops->consys_reg_mng_is_bus_hang)
return g_consys_reg_ops->consys_reg_mng_is_bus_hang();
return -1;
}
int consys_reg_mng_dump_bus_status(void)
{
if (g_consys_reg_ops &&
g_consys_reg_ops->consys_reg_mng_dump_bus_status)
return g_consys_reg_ops->consys_reg_mng_dump_bus_status();
return -1;
}
int consys_reg_mng_dump_conninfra_status(void)
{
if (g_consys_reg_ops &&
g_consys_reg_ops->consys_reg_mng_dump_conninfra_status)
return g_consys_reg_ops->consys_reg_mng_dump_conninfra_status();
return -1;
}
int consys_reg_mng_dump_cpupcr(enum conn_dump_cpupcr_type dump_type, int times, unsigned long interval_us)
{
if (g_consys_reg_ops &&
g_consys_reg_ops->consys_reg_mng_dump_cpupcr)
return g_consys_reg_ops->consys_reg_mng_dump_cpupcr(dump_type, times, interval_us);
return -1;
}
int consys_reg_mng_init(struct platform_device *pdev, const struct conninfra_plat_data* plat_data)
{
int ret = 0;
if (g_consys_reg_ops == NULL)
g_consys_reg_ops = (const struct consys_reg_mng_ops*)plat_data->reg_ops;
if (g_consys_reg_ops &&
g_consys_reg_ops->consys_reg_mng_init)
ret = g_consys_reg_ops->consys_reg_mng_init(pdev);
else
ret = EFAULT;
return ret;
}
int consys_reg_mng_deinit(void)
{
if (g_consys_reg_ops&&
g_consys_reg_ops->consys_reg_mng_deinit)
g_consys_reg_ops->consys_reg_mng_deinit();
return 0;
}
int consys_reg_mng_reg_read(unsigned long addr, unsigned int *value, unsigned int mask)
{
void __iomem *vir_addr = NULL;
vir_addr = ioremap_nocache(addr, 0x100);
if (!vir_addr) {
pr_err("ioremap fail\n");
return -1;
}
*value = (unsigned int)CONSYS_REG_READ(vir_addr) & mask;
pr_info("[%x] mask=[%x]\n", *value, mask);
iounmap(vir_addr);
return 0;
}
int consys_reg_mng_reg_write(unsigned long addr, unsigned int value, unsigned int mask)
{
void __iomem *vir_addr = NULL;
vir_addr = ioremap_nocache(addr, 0x100);
if (!vir_addr) {
pr_err("ioremap fail\n");
return -1;
}
CONSYS_REG_WRITE_MASK(vir_addr, value, mask);
iounmap(vir_addr);
return 0;
}
int consys_reg_mng_is_host_csr(unsigned long addr)
{
if (g_consys_reg_ops &&
g_consys_reg_ops->consys_reg_mng_is_host_csr)
return g_consys_reg_ops->consys_reg_mng_is_host_csr(addr);
return -1;
}

View File

@ -0,0 +1,158 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#include <linux/of.h>
#include <linux/of_reserved_mem.h>
#include <linux/io.h>
#include <linux/types.h>
#include "osal.h"
#include "consys_hw.h"
#include "emi_mng.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
unsigned long long gConEmiSize = 0;
phys_addr_t gConEmiPhyBase = 0x0;
const struct consys_platform_emi_ops* consys_platform_emi_ops = NULL;
struct consys_emi_addr_info connsys_emi_addr_info = {
.emi_ap_phy_base = 0,
.emi_ap_phy_size = 0,
.fw_emi_size = 0,
};
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
int emi_mng_set_region_protection(void)
{
if (consys_platform_emi_ops &&
consys_platform_emi_ops->consys_ic_emi_set_region_protection)
return consys_platform_emi_ops->consys_ic_emi_set_region_protection();
return -1;
}
int emi_mng_set_remapping_reg(void)
{
if (consys_platform_emi_ops &&
consys_platform_emi_ops->consys_ic_emi_set_remapping_reg)
return consys_platform_emi_ops->consys_ic_emi_set_remapping_reg();
return -1;
}
struct consys_emi_addr_info* emi_mng_get_phy_addr(void)
{
return &connsys_emi_addr_info;
}
int emi_mng_init(struct platform_device *pdev, const struct conninfra_plat_data* plat_data)
{
unsigned int fw_emi_size = 0;
#ifdef CONFIG_CONNINFRA_EMI_SUPPORT
struct device_node *np;
struct reserved_mem *rmem;
np = of_parse_phandle(pdev->dev.of_node, "memory-region", 0);
if (!np) {
pr_info("[%s] memory region not found.\n", __func__);
return -1;
}
rmem = of_reserved_mem_lookup(np);
if (!rmem) {
pr_info("[%s] no memory-region\n", __func__);
return -1;
} else {
gConEmiPhyBase = rmem->base;
gConEmiSize = rmem->size;
}
#else
pr_info("Conninfra not support EMI reservation for %04x\n", plat_data->chip_id);
#endif /* CONFIG_CONNINFRA_EMI_SUPPORT */
if (consys_platform_emi_ops == NULL) {
consys_platform_emi_ops = (const struct consys_platform_emi_ops*)plat_data->platform_emi_ops;
}
if (consys_platform_emi_ops && consys_platform_emi_ops->consys_ic_emi_get_fw_emi_size)
fw_emi_size = consys_platform_emi_ops->consys_ic_emi_get_fw_emi_size();
pr_info("[emi_mng_init] gConEmiPhyBase = [0x%llx] size = [0x%llx] fw size = [0x%x] ops=[%p]\n",
gConEmiPhyBase, gConEmiSize, fw_emi_size, consys_platform_emi_ops);
if (gConEmiPhyBase) {
connsys_emi_addr_info.emi_ap_phy_base = gConEmiPhyBase;
connsys_emi_addr_info.emi_ap_phy_size = gConEmiSize;
connsys_emi_addr_info.fw_emi_size = fw_emi_size;
} else {
pr_err("consys emi memory address gConEmiPhyBase invalid\n");
}
return 0;
}
int emi_mng_deinit(void)
{
return 0;
}

View File

@ -0,0 +1,255 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_CONSYS_HW_H_
#define _PLATFORM_CONSYS_HW_H_
#include <linux/platform_device.h>
#include "conninfra.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define CONN_SEMA_GET_SUCCESS 0
#define CONN_SEMA_GET_FAIL 1
#define CONN_SEMA_TIMEOUT (1*1000) /* 1ms */
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
struct conninfra_dev_cb {
int (*conninfra_suspend_cb) (void);
int (*conninfra_resume_cb) (void);
int (*conninfra_pmic_event_notifier) (unsigned int, unsigned int);
};
typedef int(*CONSYS_PLT_HW_INIT)(void);
typedef int(*CONSYS_PLT_XTAL_CTRL_FAST_MODE)(void);
typedef int(*CONSYS_PLT_CONNSYS_SW_RESET_CTRL)(bool bassert);
typedef void(*CONSYS_PLT_SET_IF_PINMUX)(bool enable);
typedef int(*CONSYS_PLT_TX_RX_BUS_SLP_PROT_CTRL)(bool enable);
typedef int(*CONSYS_PLT_POLLING_CONSYS_CHIPID)(void);
typedef int(*CONSYS_PLT_BUS_CLOCK_CTRL)(enum consys_drv_type drv_type, unsigned int bus_clock);
typedef int(*CONSYS_PLT_D_DIE_CFG)(void);
typedef int(*CONSYS_PLT_CONNINFRA_SYSRAM_HW_CTRL)(void);
typedef int(*CONSYS_PLT_SPI_MASTER_CFG)(void);
typedef int(*CONSYS_PLT_A_DIE_CFG)(void);
typedef int(*CONSYS_PLT_AFE_WBG_CAL)(void);
typedef int(*CONSYS_PLT_SUBSYS_PLL_INITIAL)(void);
typedef int(*CONSYS_PLT_OSC_LEGACY_MODE)(void);
typedef int(*CONSYS_PLT_TOP_PWR_CTRL)(void);
typedef int(*CONSYS_PLT_CONN_INFRA_BUS_TIMEOUT)(void);
typedef int(*CONSYS_PLT_CLKGEN_WPLL_HW_CTRL)(void);
typedef int(*CONSYS_PLT_CONNINFRA_TOP_WAKEUP) (void);
typedef int(*CONSYS_PLT_CONNINFRA_TOP_SLEEP) (void);
typedef int(*CONSYS_PLT_ADIE_TOP_CK_EN_ON_OFF_CTRL)(enum consys_drv_type type, unsigned char on);
typedef int(*CONSYS_PLT_CONNINFRA_WF_WAKEUP) (void);
typedef int(*CONSYS_PLT_CONNINFRA_WF_SLEEP) (void);
typedef int(*CONSYS_PLT_CONN_WMCPU_SW_RESET) (bool bassert);
typedef int(*CONSYS_PLT_WF_BUS_SLP_PROT_CTRL)(bool enable);
typedef int(*CONSYS_PLT_WFSYS_TOP_ON_CTRL) (bool enable);
typedef int(*CONSYS_PLT_WFSYS_BUS_SLP_PROT_CHECK)(bool enable);
typedef int(*CONSYS_PLT_WFSYS_BUS_TIMEOUT_CTRL) (void);
typedef int(*CONSYS_PLT_CONN_WMCPU_IDLE_LOOP_CHECK) (void);
typedef int(*CONSYS_PLT_WPLL_CTRL)(bool enable);
typedef int(*CONSYS_PLT_CONNINFRA_WF_REQ_CLR) (void);
typedef int(*CONSYS_PLT_CLK_GET_FROM_DTS) (struct platform_device *pdev);
typedef int(*CONSYS_PLT_CLK_DETACH) (void);
typedef int(*CONSYS_PLT_CO_CLOCK_TYPE) (void);
typedef unsigned int(*CONSYS_PLT_SOC_CHIPID_GET) (void);
typedef unsigned int(*CONSYS_PLT_GET_HW_VER)(void);
typedef int(*CONSYS_PLT_SPI_READ)(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int *data);
typedef int(*CONSYS_PLT_SPI_WRITE)(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int data);
typedef int(*CONSYS_PLT_SPI_CLOCK_SWITCH)(enum connsys_spi_speed_type type);
typedef int(*CONSYS_PLT_POWER_STATE)(void);
typedef int(*CONSYS_PLT_AIDE_TYPE_CHECK)(void);
typedef int(*CONSYS_PLT_AIDE_TYPE_CFG)(void);
struct consys_hw_ops_struct {
/* HW init */
CONSYS_PLT_HW_INIT consys_plt_hw_init;
/* Power on/off CONNSYS PART (by Conn_infra Driver) */
CONSYS_PLT_XTAL_CTRL_FAST_MODE consys_plt_xtal_ctrl_fast_mode;
CONSYS_PLT_CONNSYS_SW_RESET_CTRL consys_plt_connsys_sw_reset_ctrl;
CONSYS_PLT_SET_IF_PINMUX consys_plt_set_if_pinmux;
CONSYS_PLT_TX_RX_BUS_SLP_PROT_CTRL consys_plt_tx_rx_bus_slp_prot_ctrl;
CONSYS_PLT_POLLING_CONSYS_CHIPID consys_plt_polling_consys_chipid;
CONSYS_PLT_BUS_CLOCK_CTRL consys_plt_bus_clock_ctrl;
CONSYS_PLT_D_DIE_CFG consys_plt_d_die_cfg;
CONSYS_PLT_CONNINFRA_SYSRAM_HW_CTRL consys_plt_conninfra_sysram_hw_ctrl;
CONSYS_PLT_SPI_MASTER_CFG consys_plt_spi_master_cfg;
CONSYS_PLT_A_DIE_CFG consys_plt_a_die_cfg;
CONSYS_PLT_AFE_WBG_CAL consys_plt_afe_wbg_cal;
CONSYS_PLT_SUBSYS_PLL_INITIAL consys_plt_subsys_pll_initial;
CONSYS_PLT_OSC_LEGACY_MODE consys_plt_osc_legacy_mode;
CONSYS_PLT_TOP_PWR_CTRL consys_plt_top_pwr_ctrl;
CONSYS_PLT_CONN_INFRA_BUS_TIMEOUT consys_plt_conn_infra_bus_timeout;
CONSYS_PLT_CLKGEN_WPLL_HW_CTRL consys_plt_clkgen_wpll_hw_ctrl;
CONSYS_PLT_CONNINFRA_TOP_WAKEUP consys_plt_conninfra_wakeup;
CONSYS_PLT_CONNINFRA_TOP_SLEEP consys_plt_conninfra_sleep;
CONSYS_PLT_ADIE_TOP_CK_EN_ON_OFF_CTRL consys_plt_adie_top_ck_en_on_off_ctrl;
CONSYS_PLT_WPLL_CTRL consys_plt_wpll_ctrl;
/* Power on/off WFSYS PART 0 (by WF Driver) */
CONSYS_PLT_CONNINFRA_WF_WAKEUP consys_plt_conninfra_wf_wakeup;
CONSYS_PLT_CONNINFRA_WF_SLEEP consys_plt_conninfra_wf_sleep;
CONSYS_PLT_CONN_WMCPU_SW_RESET consys_plt_conn_wmcpu_sw_reset;
CONSYS_PLT_WF_BUS_SLP_PROT_CTRL consys_plt_wf_bus_slp_prot_ctrl;
CONSYS_PLT_WFSYS_TOP_ON_CTRL consys_plt_wfsys_top_on_ctrl;
CONSYS_PLT_WFSYS_BUS_SLP_PROT_CHECK consys_plt_wfsys_bus_slp_prot_check;
CONSYS_PLT_WFSYS_BUS_TIMEOUT_CTRL consys_plt_wfsys_bus_timeout_ctrl;
CONSYS_PLT_CONN_WMCPU_IDLE_LOOP_CHECK consys_plt_conn_wmcpu_idle_loop_check;
CONSYS_PLT_CONNINFRA_WF_REQ_CLR consys_plt_conninfra_wf_req_clr;
/* load from dts */
CONSYS_PLT_CLK_GET_FROM_DTS consys_plt_clk_get_from_dts;
CONSYS_PLT_CLK_DETACH consys_plt_clk_detach;
/* clock */
CONSYS_PLT_CO_CLOCK_TYPE consys_plt_co_clock_type;
CONSYS_PLT_SOC_CHIPID_GET consys_plt_soc_chipid_get;
/* debug */
CONSYS_PLT_GET_HW_VER consys_plt_get_hw_ver;
/* For SPI operation */
CONSYS_PLT_SPI_READ consys_plt_spi_read;
CONSYS_PLT_SPI_WRITE consys_plt_spi_write;
/* For SPI clock switch */
CONSYS_PLT_SPI_CLOCK_SWITCH consys_plt_spi_clock_switch;
/* power state */
CONSYS_PLT_POWER_STATE consys_plt_power_state;
/* others */
CONSYS_PLT_AIDE_TYPE_CHECK consys_plt_adie_type_check;
CONSYS_PLT_AIDE_TYPE_CFG consys_plt_adie_type_cfg;
};
struct consys_hw_env {
bool valid;
unsigned int adie_hw_version;
unsigned int adie_id;
int is_rc_mode;
};
struct conninfra_plat_data {
const unsigned int chip_id;
const void* hw_ops;
const void* reg_ops;
const void* platform_emi_ops;
const void* platform_pmic_ops;
};
extern struct consys_hw_env conn_hw_env[AIDE_NUM_MAX];
extern struct consys_base_addr conn_reg;
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
int mtk_conninfra_drv_init(struct conninfra_dev_cb *dev_cb);
int mtk_conninfra_drv_deinit(void);
int consys_hw_pwr_on(unsigned int curr_status, unsigned int on_radio);
int consys_hw_pwr_off(unsigned int curr_status, unsigned int off_radio);
int consys_hw_wifi_power_ctl(unsigned int enable);
int consys_hw_bt_power_ctl(unsigned int enable);
int consys_hw_gps_power_ctl(unsigned int enable);
int consys_hw_fm_power_ctl(unsigned int enable);
int consys_hw_pmic_event_cb(unsigned int id, unsigned int event);
unsigned int consys_hw_chipid_get(void);
int consys_hw_get_clock_schematic(void);
unsigned int consys_hw_get_hw_ver(void);
/*******************************************************************************
* tempoary for STEP
********************************************************************************
*/
/*
* return
* 1 : can read
* 0 : can't read
* -1: not consys register
*/
int consys_hw_reg_readable(void);
int consys_hw_is_connsys_reg(phys_addr_t addr);
/*
* 0 means NO hang
* > 0 means hang!!
*/
int consys_hw_is_bus_hang(void);
int consys_hw_dump_bus_status(void);
int consys_hw_spi_read(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int *data);
int consys_hw_spi_write(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int data);
int consys_hw_adie_top_ck_en_on(enum consys_drv_type type);
int consys_hw_adie_top_ck_en_off(enum consys_drv_type type);
/* NOTE: debug only*/
int consys_hw_force_conninfra_wakeup(void);
int consys_hw_force_conninfra_sleep(void);
int consys_hw_spi_clock_switch(enum connsys_spi_speed_type type);
struct platform_device *get_consys_device(void);
struct consys_base_addr *get_conn_reg_base_addr(void);
int consys_hw_dump_power_state(void);
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _PLATFORM_CONSYS_HW_H_ */

View File

@ -0,0 +1,28 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_CONSYS_REG_BASE_H_
#define _PLATFORM_CONSYS_REG_BASE_H_
struct consys_reg_base_addr {
unsigned long phy_addr;
unsigned long long size;
unsigned long vir_addr;
};
#endif /* _PLATFORM_CONSYS_REG_BASE_H_ */

View File

@ -0,0 +1,57 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_CONSYS_REG_MNG_H_
#define _PLATFORM_CONSYS_REG_MNG_H_
#include <linux/platform_device.h>
#include "consys_hw.h"
enum conn_dump_cpupcr_type
{
CONN_DUMP_CPUPCR_TYPE_BT = 1,
CONN_DUMP_CPUPCR_TYPE_WF = 2,
CONN_DUMP_CPUPCR_TYPE_ALL = 3,
};
struct consys_reg_mng_ops {
int(*consys_reg_mng_init) (struct platform_device *pdev);
int(*consys_reg_mng_deinit) (void);
int(*consys_reg_mng_check_reable) (void);
int(*consys_reg_mng_is_consys_reg) (unsigned int addr);
int(*consys_reg_mng_is_bus_hang) (void);
int(*consys_reg_mng_dump_bus_status) (void);
int(*consys_reg_mng_dump_conninfra_status) (void);
int(*consys_reg_mng_dump_cpupcr) (enum conn_dump_cpupcr_type, int times, unsigned long interval_us);
int(*consys_reg_mng_is_host_csr) (unsigned long addr);
};
int consys_reg_mng_init(struct platform_device *pdev, const struct conninfra_plat_data* plat_data);
int consys_reg_mng_deinit(void);
int consys_reg_mng_reg_readable(void);
int consys_reg_mng_is_connsys_reg(phys_addr_t addr);
int consys_reg_mng_reg_read(unsigned long addr, unsigned int *value, unsigned int mask);
int consys_reg_mng_reg_write(unsigned long addr, unsigned int value, unsigned int mask);
int consys_reg_mng_is_bus_hang(void);
int consys_reg_mng_dump_bus_status(void);
int consys_reg_mng_dump_conninfra_status(void);
int consys_reg_mng_dump_cpupcr(enum conn_dump_cpupcr_type dump_type, int times, unsigned long interval_us);
int consys_reg_mng_is_host_csr(unsigned long addr);
#endif /* _PLATFORM_CONSYS_REG_MNG_H_ */

View File

@ -0,0 +1,174 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_CONSYS_REG_UTIL_H_
#define _PLATFORM_CONSYS_REG_UTIL_H_
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/* platform dependent */
#include "plat_def.h"
#ifndef BIT
#define BIT(x) (1<<(x))
#endif
#define KBYTE (1024*sizeof(char))
#ifndef GENMASK
#define GENMASK(h, l) \
(((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
#endif
#define GET_BIT_MASK(value, mask) ((value) & (mask))
#define SET_BIT_MASK(pdest, value, mask) (*(pdest) = (GET_BIT_MASK(*(pdest), ~(mask)) | GET_BIT_MASK(value, mask)))
#define GET_BIT_RANGE(data, end, begin) ((data) & GENMASK(end, begin))
#define SET_BIT_RANGE(pdest, data, end, begin) (SET_BIT_MASK(pdest, data, GENMASK(end, begin)))
#define CONSYS_SET_BIT(REG, BITVAL) (*((volatile unsigned int *)(REG)) |= ((unsigned int)(BITVAL)))
#define CONSYS_CLR_BIT(REG, BITVAL) ((*(volatile unsigned int *)(REG)) &= ~((unsigned int)(BITVAL)))
#define CONSYS_CLR_BIT_WITH_KEY(REG, BITVAL, KEY) {\
unsigned int val = (*(volatile unsigned int *)(REG)); \
val &= ~((unsigned int)(BITVAL)); \
val |= ((unsigned int)(KEY)); \
(*(volatile unsigned int *)(REG)) = val;\
}
#define CONSYS_REG_READ(addr) (*((volatile unsigned int *)(addr)))
#define CONSYS_REG_READ_BIT(addr, BITVAL) (*((volatile unsigned int *)(addr)) & ((unsigned int)(BITVAL)))
#define CONSYS_REG_WRITE(addr, data) mt_reg_sync_writel(data, addr)
#define CONSYS_REG_WRITE_RANGE(reg, data, end, begin) {\
unsigned int val = CONSYS_REG_READ(reg); \
SET_BIT_RANGE(&val, data, end, begin); \
CONSYS_REG_WRITE(reg, val); \
}
#define CONSYS_REG_WRITE_MASK(reg, data, mask) {\
unsigned int val = CONSYS_REG_READ(reg); \
SET_BIT_MASK(&val, data, mask); \
CONSYS_REG_WRITE(reg, val); \
}
/*
* Write value with value_offset bits of right shift and size bits,
* to the reg_offset-th bit of address reg
* value -----------XXXXXXXXXXXX-------------------
* |<--size-->|<--value_offset-->|
* reg -------------OOOOOOOOOOOO-----------------
* |<--size-->|<--reg_offset-->|
* result -------------XXXXXXXXXXXX-----------------
*/
#define CONSYS_REG_WRITE_OFFSET_RANGE(reg, value, reg_offset, value_offset, size) ({\
unsigned int data = (value) >> (value_offset); \
data = GET_BIT_RANGE(data, size, 0); \
data = data << (reg_offset); \
CONSYS_REG_WRITE_RANGE(reg, data, ((reg_offset) + ((size) - 1)), reg_offset); \
})
#define CONSYS_REG_WRITE_BIT(reg, offset, val) CONSYS_REG_WRITE_OFFSET_RANGE(reg, ((val) & 1), offset, 0, 1)
#define CONSYS_REG_BIT_POLLING(addr, bit_index, exp_val, loop, delay, success) {\
unsigned int polling_count = 0; \
unsigned int reg_value = 0; \
success = 0; \
reg_value = (CONSYS_REG_READ_BIT(addr, (0x1 << bit_index)) >> bit_index); \
while (reg_value != exp_val) { \
if (polling_count > loop) { \
success = -1; \
break; \
} \
reg_value = (CONSYS_REG_READ_BIT(addr, (0x1 << bit_index)) >> bit_index); \
udelay(delay); \
polling_count++; \
} \
}
#define CONSYS_REG_POLLING_LARGER_OR_EQUAL(addr, mask, bit_index, exp_val, loop, delay, success) {\
unsigned int polling_count = 0; \
unsigned int reg_value = 0; \
success = 0; \
reg_value = ((CONSYS_REG_READ(addr) & mask) >> bit_index); \
while (reg_value < exp_val) { \
if (polling_count > loop) { \
success = -1; \
break; \
} \
reg_value = ((CONSYS_REG_READ(addr) & mask) >> bit_index); \
udelay(delay); \
polling_count++; \
} \
}
#define CONSYS_REG_POLLING_EQUAL(addr, mask, bit_index, exp_val, loop, delay, success) {\
unsigned int polling_count = 0; \
unsigned int reg_value = 0; \
success = 0; \
reg_value = ((CONSYS_REG_READ(addr) & mask) >> bit_index); \
while (reg_value != exp_val) { \
if (polling_count > loop) { \
success = -1; \
break; \
} \
reg_value = ((CONSYS_REG_READ(addr) & mask) >> bit_index); \
udelay(delay); \
polling_count++; \
} \
}
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _PLATFORM_CONSYS_REG_UTIL_H_ */

View File

@ -0,0 +1,99 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_EMI_MNG_H_
#define _PLATFORM_EMI_MNG_H_
#include <linux/platform_device.h>
#include <linux/types.h>
#include "osal.h"
#include "consys_hw.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
struct consys_emi_addr_info {
/* This include BT/WF FW and WFDMA */
phys_addr_t emi_ap_phy_base;
unsigned int emi_ap_phy_size;
unsigned int fw_emi_size;
};
typedef int(*CONSYS_IC_EMI_SET_REGION_PROTECTION) (void);
typedef int(*CONSYS_IC_EMI_SET_REMAPPING_REG) (void);
typedef unsigned int (*CONSYS_IC_GET_FW_EMI_SIZE)(void);
struct consys_platform_emi_ops {
CONSYS_IC_EMI_SET_REGION_PROTECTION consys_ic_emi_set_region_protection;
CONSYS_IC_EMI_SET_REMAPPING_REG consys_ic_emi_set_remapping_reg;
CONSYS_IC_GET_FW_EMI_SIZE consys_ic_emi_get_fw_emi_size;
};
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
int emi_mng_init(struct platform_device *pdev, const struct conninfra_plat_data* plat_data);
int emi_mng_deinit(void);
int emi_mng_set_region_protection(void);
int emi_mng_set_remapping_reg(void);
struct consys_emi_addr_info* emi_mng_get_phy_addr(void);
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _PLATFORM_EMI_MNG_H_ */

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_DEF_H_
#define _PLATFORM_DEF_H_
#include <linux/delay.h>
#include <linux/io.h>
#define mt_reg_sync_writel(v, a) \
do { \
writel((v), (void __force __iomem *)((a))); \
mb(); \
} while (0)
#endif /* _PLATFORM_DEF_H_ */

View File

@ -0,0 +1,110 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_PMIC_MNG_H_
#define _PLATFORM_PMIC_MNG_H_
#include <linux/platform_device.h>
#include "consys_hw.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
typedef int(*CONSYS_PMIC_GET_FROM_DTS) (
struct platform_device *pdev,
struct conninfra_dev_cb* dev_cb);
typedef int(*CONSYS_PMIC_COMMON_POWER_CTRL) (unsigned int enable);
typedef int(*CONSYS_PMIC_WIFI_POWER_CTRL) (unsigned int enable);
typedef int(*CONSYS_PMIC_BT_POWER_CTRL) (unsigned int enable);
typedef int(*CONSYS_PMIC_GPS_POWER_CTRL) (unsigned int enable);
typedef int(*CONSYS_PMIC_FM_POWER_CTRL) (unsigned int enable);
typedef int(*CONSYS_PMIC_EVENT_NOTIFIER) (unsigned int id, unsigned int event);
struct consys_platform_pmic_ops {
CONSYS_PMIC_GET_FROM_DTS consys_pmic_get_from_dts;
/* vcn 18 */
CONSYS_PMIC_COMMON_POWER_CTRL consys_pmic_common_power_ctrl;
CONSYS_PMIC_WIFI_POWER_CTRL consys_pmic_wifi_power_ctrl;
CONSYS_PMIC_BT_POWER_CTRL consys_pmic_bt_power_ctrl;
CONSYS_PMIC_GPS_POWER_CTRL consys_pmic_gps_power_ctrl;
CONSYS_PMIC_FM_POWER_CTRL consys_pmic_fm_power_ctrl;
CONSYS_PMIC_EVENT_NOTIFIER consys_pmic_event_notifier;
};
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
int pmic_mng_init(
struct platform_device *pdev,
struct conninfra_dev_cb* dev_cb,
const struct conninfra_plat_data* plat_data);
int pmic_mng_deinit(void);
int pmic_mng_common_power_ctrl(unsigned int enable);
int pmic_mng_wifi_power_ctrl(unsigned int enable);
int pmic_mng_bt_power_ctrl(unsigned int enable);
int pmic_mng_gps_power_ctrl(unsigned int enable);
int pmic_mng_fm_power_ctrl(unsigned int enable);
int pmic_mng_event_cb(unsigned int id, unsigned int event);
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _PLATFORM_PMIC_MNG_H_ */

View File

@ -0,0 +1,59 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7981_H_
#define _PLATFORM_MT7981_H_
enum
{
ADIE_TYPE_NONE = 0,
ADIE_TYPE_ONE,
ADIE_TYPE_TWO,
ADIE_TYPE_NUM_MAX
};
enum conn_semaphore_type
{
CONN_SEMA_CHIP_POWER_ON_INDEX = 0,
CONN_SEMA_CALIBRATION_INDEX = 1,
CONN_SEMA_FW_DL_INDEX = 2,
CONN_SEMA_CLOCK_SWITCH_INDEX = 3,
CONN_SEMA_CCIF_INDEX = 4,
CONN_SEMA_COEX_INDEX = 5,
CONN_SEMA_USB_EP0_INDEX = 6,
CONN_SEMA_USB_SHARED_INFO_INDEX = 7,
CONN_SEMA_USB_SUSPEND_INDEX = 8,
CONN_SEMA_USB_RESUME_INDEX = 9,
CONN_SEMA_PCIE_INDEX = 10,
CONN_SEMA_RFSPI_INDEX = 11,
CONN_SEMA_EFUSE_INDEX = 12,
CONN_SEMA_THERMAL_INDEX = 13,
CONN_SEMA_FLASH_INDEX = 14,
CONN_SEMA_DEBUG_INDEX = 15,
CONN_SEMA_WIFI_LP_INDEX = 16,
CONN_SEMA_PATCH_DL_INDEX = 17,
CONN_SEMA_SHARED_VAR_INDEX = 18,
CONN_SEMA_CONN_INFRA_COMMON_SYSRAM_INDEX = 19,
CONN_SEMA_NUM_MAX = 32 /* can't be omitted */
};
unsigned int consys_soc_chipid_get(void);
unsigned int consys_get_hw_ver(void);
#endif /* _PLATFORM_MT7981_H_ */

View File

@ -0,0 +1,132 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7981_CONSYS_REG_H_
#define _PLATFORM_MT7981_CONSYS_REG_H_
#include "consys_reg_base.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
enum consys_base_addr_index {
TOP_MISC_BASE = 0, /* top_misc */
TOPRGU_BASE = 1, /* TOPRGU */
GPIO_BASE = 2, /* GPIO */
IOCFG_TM_BASE = 3, /* IOCFG_TM */
IOCFG_LT_BASE = 4, /* IOCFG_LT */
INFRACFG_AO_BASE = 5, /* infracfg_ao_auto_gen_reg */
CONN_INFRA_CFG_BASE = 6, /* conn_infra_cfg */
CONN_INFRA_SYSRAM_BASE = 7, /* conn_infra_sysram */
CONN_INFRA_CLKGEN_ON_TOP_BASE = 8, /* conn_infra_clkgen_on_top */
CONN_HOST_CSR_TOP_BASE = 9, /* conn_host_csr_top */
CONN_INFRA_BUS_CR_BASE = 10, /* conn_infra_bus_cr */
CONN_INFRA_RGU_BASE = 11, /* conn_infra_rgu */
CONN_WT_SLP_CTL_REG_BASE = 12, /* conn_wt_slp_ctl_reg */
INST2_CONN_WT_SLP_CTL_REG_BASE = 13, /* Inst2_conn_wt_slp_ctl_reg */
CONN_RF_SPI_MST_REG_BASE = 14, /* conn_rf_spi_mst_reg */
INST2_CONN_RF_SPI_MST_REG_BASE = 15, /* Inst2_conn_rf_spi_mst_reg */
CONN_SEMAPHORE_BASE = 16, /* conn_semaphore */
CONN_AFE_CTL_BASE = 17, /* conn_afe_ctl */
CONN_AFE_CTL_2ND_BASE = 18, /* conn_afe_ctl_2nd */
WF_TOP_SLPPROT_ON_BASE = 19, /* wf_top_slpprot_on by remapping to 0x81020000 */
WF_TOP_CFG_BASE = 20, /* wf_top_cfg by remapping to 0x80020000 */
WF_MCU_CONFIG_LS_BASE = 21, /* wf_mcu_confg_ls by remapping to 0x88000000 */
WF_MCU_BUS_CR_BASE = 22, /* wf_mcu_bus_cr by remapping to 0x830C0XXX */
WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE = 23, /* wf_mcusys_infra_bus_full_u_debug_ctrl_ao by remapping to 0x810F0000 */
WF_TOP_CFG_ON_BASE = 24, /* wf_top_cfg_on by remapping to 0x81021000 */
CONSYS_BASE_ADDR_MAX
};
struct consys_base_addr {
struct consys_reg_base_addr reg_base_addr[CONSYS_BASE_ADDR_MAX];
};
extern struct consys_base_addr conn_reg;
#define REG_TOP_MISC_ADDR conn_reg.reg_base_addr[TOP_MISC_BASE].vir_addr
#define REG_TOP_RGU_ADDR conn_reg.reg_base_addr[TOPRGU_BASE].vir_addr
#define REG_GPIO_BASE_ADDR conn_reg.reg_base_addr[GPIO_BASE].vir_addr
#define REG_IOCFG_TM_ADDR conn_reg.reg_base_addr[IOCFG_TM_BASE].vir_addr
#define REG_IOCFG_LT_ADDR conn_reg.reg_base_addr[IOCFG_LT_BASE].vir_addr
#define REG_INFRACFG_AO_ADDR conn_reg.reg_base_addr[INFRACFG_AO_BASE].vir_addr
#define REG_CONN_INFRA_CFG_ADDR conn_reg.reg_base_addr[CONN_INFRA_CFG_BASE].vir_addr
#define REG_CONN_INFRA_SYSRAM_ADDR conn_reg.reg_base_addr[CONN_INFRA_SYSRAM_BASE].vir_addr
#define REG_CONN_INFRA_CLKGEN_ON_TOP_ADDR conn_reg.reg_base_addr[CONN_INFRA_CLKGEN_ON_TOP_BASE].vir_addr
#define REG_CONN_HOST_CSR_TOP_ADDR conn_reg.reg_base_addr[CONN_HOST_CSR_TOP_BASE].vir_addr
#define REG_CONN_INFRA_BUS_CR_ADDR conn_reg.reg_base_addr[CONN_INFRA_BUS_CR_BASE].vir_addr
#define REG_CONN_INFRA_RGU_ADDR conn_reg.reg_base_addr[CONN_INFRA_RGU_BASE].vir_addr
#define REG_CONN_WT_SLP_CTL_REG_ADDR conn_reg.reg_base_addr[CONN_WT_SLP_CTL_REG_BASE].vir_addr
#define REG_INST2_CONN_WT_SLP_CTL_REG_ADDR conn_reg.reg_base_addr[INST2_CONN_WT_SLP_CTL_REG_BASE].vir_addr
#define REG_CONN_RF_SPI_MST_REG_ADDR conn_reg.reg_base_addr[CONN_RF_SPI_MST_REG_BASE].vir_addr
#define REG_INST2_CONN_RF_SPI_MST_REG_ADDR conn_reg.reg_base_addr[INST2_CONN_RF_SPI_MST_REG_BASE].vir_addr
#define REG_CONN_SEMAPHORE_ADDR conn_reg.reg_base_addr[CONN_SEMAPHORE_BASE].vir_addr
#define REG_CONN_AFE_CTL_ADDR conn_reg.reg_base_addr[CONN_AFE_CTL_BASE].vir_addr
#define REG_CONN_AFE_CTL_2ND_ADDR conn_reg.reg_base_addr[CONN_AFE_CTL_2ND_BASE].vir_addr
#define REG_WF_TOP_SLPPROT_ON_ADDR conn_reg.reg_base_addr[WF_TOP_SLPPROT_ON_BASE].vir_addr
#define REG_WF_TOP_CFG_ADDR conn_reg.reg_base_addr[WF_TOP_CFG_BASE].vir_addr
#define REG_WF_MCU_CONFIG_LS_ADDR conn_reg.reg_base_addr[WF_MCU_CONFIG_LS_BASE].vir_addr
#define REG_WF_MCU_BUS_CR_ADDR conn_reg.reg_base_addr[WF_MCU_BUS_CR_BASE].vir_addr
#define REG_WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_ADDR conn_reg.reg_base_addr[WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE].vir_addr
#define REG_WF_TOP_CFG_ON_ADDR conn_reg.reg_base_addr[WF_TOP_CFG_ON_BASE].vir_addr
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
struct consys_base_addr* get_conn_reg_base_addr(void);
#endif /* _PLATFORM_MT7981_CONSYS_REG_H_ */

View File

@ -0,0 +1,243 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7981_CONSYS_REG_OFFSET_H_
#define _PLATFORM_MT7981_CONSYS_REG_OFFSET_H_
/**********************************************************************/
/* Base: TOP_MISC (0x11D1_0000) */
/**********************************************************************/
#define CONNSYS_MISC 0x0114
#define TOP_MISC_RSRV_ALL1_3 0x021C
/**********************************************************************/
/* Base: TOP RGU (0x1001_C000) */
/**********************************************************************/
#define TOP_RGU_WDT_SWSYSRST 0x0018
/**********************************************************************/
/* Base: GPIO (0x11D0_0000) */
/**********************************************************************/
#define GPIO_MODE5 0x0350
#define GPIO_MODE6 0x0360
#define GPIO_MODE7 0x0370
/**********************************************************************/
/* Base: IOCFG_TM (0x11F0_0000) */
/**********************************************************************/
#define IOCFG_TM_DRV_CFG0 0x0000
#define IOCFG_TM_DRV_CFG1 0x0010
/**********************************************************************/
/* Base: IOCFG_LT (0x11F1_0000) */
/**********************************************************************/
#define IOCFG_LT_DRV_CFG0 0x0000
#define IOCFG_LT_DRV_CFG1 0x0010
/**********************************************************************/
/* Base: INFRACFG_AO (0x1000_3000) */
/**********************************************************************/
#define CONN2AP_GALS_SLPPROT 0x00D0
#define AP2CONN_GALS_SLPPROT 0x00D4
/**********************************************************************/
/* Base: CONN_INFRA_CFG (0x1800_1000) */
/**********************************************************************/
#define CONN_INFRA_CFG_IP_VERSION 0x0000
#define EFUSE 0x0020
#define ADIE_CTL 0x0030
#define CONN_INFRA_CFG_PWRCTRL0 0x0200
#define CONN_INFRA_CFG_RC_CTL_0 0x0380
#define OSC_CTL_0 0x0300
#define EMI_CTL_WF 0x0414
#define CONN_INFRA_WF_SLP_CTRL 0x0540
#define CONN_INFRA_WF_SLP_STATUS 0x0544
/**********************************************************************/
/* Base: CONN_INFRA_SYSRAM (0x1805_0000) */
/**********************************************************************/
#define SYSRAM_BASE_ADDR 0x0000
/**********************************************************************/
/* Base: CONN_INFRA_CLKGEN_ON_TOP (0x1800_9000) */
/**********************************************************************/
#define CKGEN_BUS_WPLL_DIV_1 0x0008
#define CKGEN_BUS_WPLL_DIV_2 0x000C
#define CKGEN_RFSPI_WPLL_DIV 0x0040
#define CKGEN_BUS 0x0A00
/**********************************************************************/
/* Base: CONN_HOST_CSR_TOP (0x1806_0000) */
/**********************************************************************/
#define CONN_INFRA_WAKEPU_TOP 0x01A0
#define CONN_INFRA_WAKEPU_WF 0x01A4
#define CONN2AP_REMAP_MCU_EMI 0x01C4
#define CONN2AP_REMAP_WF_PERI 0x01D4
#define CONN2AP_RSVD_PERI_REGION1 0x01D8
#define DBG_DUMMY_3 0x02CC
/**********************************************************************/
/* Base: CONN_INFRA_BUS_CR (0x1800_E000) */
/**********************************************************************/
#define CONN_INFRA_BUS_OFF_TIMEOUT_CTRL 0x0300
#define CONN_INFRA_BUS_ON_TIMEOUT_CTRL 0x031C
#define CONN2AP_EMI_PATH_ADDR_START 0x0360
#define CONN2AP_EMI_PATH_ADDR_END 0x0364
/**********************************************************************/
/* Base: CONN_INFRA_RGU (0x1800_0000) */
/**********************************************************************/
#define WFSYS_ON_TOP_PWR_CTL 0x0010
#define BGFYS_ON_TOP_PWR_CTL 0x0020
#define SYSRAM_HWCTL_PDN 0x0050
#define SYSRAM_HWCTL_SLP 0x0054
#define WFSYS_CPU_SW_RST_B 0x0120
/**********************************************************************/
/* Base: CONN_WT_SLP_CTL_REG (0x1800_5000) */
/* Base: INST2_CONN_WT_SLP_CTL_REG (0x1808_5000) */
/**********************************************************************/
#define WB_WF_CK_ADDR 0x0070
#define WB_WF_WAKE_ADDR 0x0074
#define WB_WF_ZPS_ADDR 0x0078
#define WB_TOP_CK_ADDR 0x0084
#define WB_WF_B0_CMD_ADDR 0x008C
#define WB_WF_B1_CMD_ADDR 0x0090
#define WB_SLP_TOP_CK_0 0x0120
#define WB_SLP_TOP_CK_1 0x0124
/**********************************************************************/
/* Base: CONN_RF_SPI_MST_REG (0x1800_4000) */
/* Base: INST2_CONN_RF_SPI_MST_REG (0x1808_4000) */
/**********************************************************************/
#define SPI_STA 0x0000
#define SPI_WF_ADDR 0x0010
#define SPI_WF_WDAT 0x0014
#define SPI_WF_RDAT 0x0018
#define SPI_BT_ADDR 0x0020
#define SPI_BT_WDAT 0x0024
#define SPI_BT_RDAT 0x0028
#define SPI_FM_ADDR 0x0030
#define SPI_FM_WDAT 0x0034
#define SPI_FM_RDAT 0x0038
#define SPI_GPS_ADDR 0x0040
#define SPI_GPS_WDAT 0x0044
#define SPI_GPS_RDAT 0x0048
#define SPI_TOP_ADDR 0x0050
#define SPI_TOP_WDAT 0x0054
#define SPI_TOP_RDAT 0x0058
/**********************************************************************/
/* Base: CONN_SEMAPHORE_BASE (0x1807_0000) */
/**********************************************************************/
#define CONN_SEMA00_M2_OWN_STA 0x2000
#define CONN_SEMA00_M2_OWN_REL 0x2200
#define CONN_SEMA_OWN_BY_M0_STA_REP 0x0400
#define CONN_SEMA_OWN_BY_M1_STA_REP 0x1400
#define CONN_SEMA_OWN_BY_M2_STA_REP 0x2400
#define CONN_SEMA_OWN_BY_M3_STA_REP 0x3400
#define CONN_SEMA_OWN_BY_M4_STA_REP 0x4400
#define CONN_SEMA_OWN_BY_M5_STA_REP 0x5400
#define CONN_SEMA_OWN_BY_M6_STA_REP 0x6400
#define CONN_SEMA_OWN_BY_M7_STA_REP 0x7400
/**********************************************************************/
/* Base: CONN_AFE_CTL_BASE (0x1800_3000) */
/* Base: CONN_AFE_CTL_2ND_BASE (0x1808_3000) */
/**********************************************************************/
#define RG_DIG_EN_01 0x0000
#define RG_DIG_EN_02 0x0004
#define RG_DIG_EN_03 0x0008
#define RG_DIG_TOP_01 0x000C
#define RG_PLL_STB_TIME 0x00F4
/**********************************************************************/
/* Base: WF_TOP_SLPPROT_ON_BASE (0x8102_0000 remap to 0x184C_0000) */
/**********************************************************************/
#define WF_TOP_SLPPROT_ON_STATUS_READ 0x300C
/**********************************************************************/
/* Base: WF_TOP_CFG_BASE (0x8002_0000 remap to 0x184B_0000) */
/**********************************************************************/
#define WF_TOP_CFG_IP_VERSION 0x0010
/**********************************************************************/
/* Base: WF_MCU_CONFIG_LS_BASE (0x8800_0000 remap to 0x184F_0000) */
/**********************************************************************/
#define BUSHANGCR 0x0440
/**********************************************************************/
/* Base: WF_MCU_BUS_CR_BASE (0x830C_0XXX remap to 0x1840_0XXX) */
/**********************************************************************/
#define AP2WF_REMAP_1 0x0120
/**********************************************************************/
/* Base: WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE (0x810F_0000 remap to 0x1850_0000) */
/**********************************************************************/
#define WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_WFMCU_PWA_CTRL0 0x0000
/**********************************************************************/
/* Base: WF_TOP_CFG_ON_BASE (0x8102_1000 remap to 0x184C_0000) */
/**********************************************************************/
#define ROMCODE_INDEX 0x1604
/**********************************************************************/
/* A-die CR */
/**********************************************************************/
#define ATOP_CHIP_ID 0x02C
#define ATOP_TOP_CLK_EN 0xA00
#define ATOP_RG_ENCAL_WBTAC_IF_SW 0x070
#define ATOP_RG_WRI_CK_SELECT 0x4AC
#define ATOP_EFUSE_CTRL_1 0x108
#define ATOP_EFUSE_CTRL_2 0x148
#define ATOP_EFUSE_CTRL_3 0x14C
#define ATOP_EFUSE_CTRL_4 0x15C
#define ATOP_EFUSE_RDATA0 0x130
#define ATOP_EFUSE_RDATA1 0x134
#define ATOP_EFUSE_RDATA2 0x138
#define ATOP_EFUSE_RDATA3 0x13C
#define ATOP_RG_EFUSE_CFG5 0x144
#define ATOP_THADC_ANALOG 0x3A6
#define ATOP_THADC_SLOP 0x3A7
#define ATOP_RG_TOP_THADC_BG 0x034
#define ATOP_RG_TOP_THADC_00 0x038
#define ATOP_XTAL_TRIM_FLOW 0x3AC
#define ATOP_XTAL_CR_C1_SEL_AXM_80M_OSC 0x390
#define ATOP_XTAL_CR_C1_SEL_AXM_40M_OSC 0x391
#define ATOP_XTAL_CR_C1_SEL_AXM_TRIM1_80M_OSC 0x398
#define ATOP_XTAL_CR_C1_SEL_AXM_TRIM1_40M_OSC 0x399
#define ATOP_RG_STRAP_PIN_IN 0x4FC
#define ATOP_RG_XO_01 0x65C
#define ATOP_RG_XO_03 0x664
#define ATOP_7975_XTAL_CALIBRATION 0x3A1
#define ATOP_7975_XTAL_TRIM2_COMPENSATION 0x3A2
#define ATOP_7975_XTAL_TRIM3_COMPENSATION 0x3A3
#define ATOP_7975_XTAL_TRIM4_COMPENSATION 0x3A4
#define ATOP_7975_XTAL_TRIM_FLOW 0x3A5
#define ATOP_7975_CR_C1_C2_A94 0xA94
#define ATOP_7975_CR_C1_C2_A18 0xA18
#define ATOP_7975_CR_C1_C2_A84 0xA84
#define ATOP_7975_CR_C1_C2_AA4 0xAA4
#endif /* _PLATFORM_MT7981_CONSYS_REG_OFFSET_H_ */

View File

@ -0,0 +1,72 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7981_EMI_H_
#define _PLATFORM_MT7981_EMI_H_
#include "osal.h"
#include "emi_mng.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
struct consys_platform_emi_ops* get_consys_platform_emi_ops(void);
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _PLATFORM_MT7981_EMI_H_ */

View File

@ -0,0 +1,72 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7981_PMIC_H_
#define _PLATFORM_MT7981_PMIC_H_
#include "osal.h"
#include "pmic_mng.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
struct consys_platform_pmic_ops* get_consys_platform_pmic_ops(void);
#endif /* _PLATFORM_MT7981_PMIC_H_ */

View File

@ -0,0 +1,63 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7981_POS_H_
#define _PLATFORM_MT7981_POS_H_
int consys_plt_hw_init(void);
int consys_xtal_ctrl_fast_mode(void);
int consys_sw_reset_ctrl(bool bassert);
int consys_tx_rx_bus_slp_prot_ctrl(bool enable);
void consys_set_if_pinmux(bool enable);
int consys_polling_chipid(void);
int consys_plt_adie_type_cfg(void);
int consys_bus_clock_ctrl(enum consys_drv_type drv_type, unsigned int bus_clock);
int consys_emi_set_remapping_reg(void);
int consys_emi_set_region_protection(void);
int connsys_d_die_cfg(void);
int connsys_conninfra_sysram_hw_ctrl(void);
int connsys_spi_master_cfg(void);
int consys_sema_acquire_timeout(unsigned int index, unsigned int usec);
void consys_sema_release(unsigned int index);
int consys_spi_read(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int *data);
int consys_spi_write(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int data);
int consys_spi_write_offset_range(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int value,
unsigned int reg_offset, unsigned int value_offset, unsigned int size);
int connsys_a_die_cfg(void);
int connsys_afe_wbg_cal(void);
int connsys_subsys_pll_initial(void);
int connsys_osc_legacy_mode(void);
int connsys_top_pwr_ctrl(void);
int connsys_conn_infra_bus_timeout(void);
int connsys_clkgen_wpll_hw_ctrl(void);
int consys_conninfra_top_wakeup(void);
int consys_conninfra_top_sleep(void);
int consys_adie_top_ck_en_on_off_ctrl(enum consys_drv_type type, unsigned char on);
int consys_conninfra_wf_wakeup(void);
int consys_conninfra_wf_sleep(void);
int consys_conn_wmcpu_sw_reset(bool bassert);
int consys_wf_bus_slp_prot_ctrl(bool enable);
int consys_wfsys_top_on_ctrl(bool enable);
int consys_wfsys_bus_slp_prot_check(bool enable);
int consys_wfsys_bus_timeout_ctrl(void);
int consys_wmcpu_idle_loop_check(void);
int consys_wpll_ctrl(bool enable);
int consys_conninfra_wf_req_clr(void);
#endif /* _PLATFORM_MT7981_POS_H_ */

View File

@ -0,0 +1,162 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/delay.h>
#include <linux/memblock.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/of_address.h>
#include "osal.h"
#include "conninfra.h"
#include "consys_hw.h"
#include "consys_reg_mng.h"
#include "consys_reg_util.h"
#include "mt7981.h"
#include "mt7981_pos.h"
#include "emi_mng.h"
#include "mt7981_consys_reg.h"
#include "mt7981_consys_reg_offset.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define PLATFORM_SOC_CHIP 0x7981
#define CONN_IP_VER 0x02090000
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
struct consys_hw_ops_struct g_consys_hw_ops_mt7981 = {
/* HW init */
.consys_plt_hw_init = consys_plt_hw_init,
/* POS */
.consys_plt_xtal_ctrl_fast_mode = consys_xtal_ctrl_fast_mode,
.consys_plt_connsys_sw_reset_ctrl = consys_sw_reset_ctrl,
.consys_plt_set_if_pinmux = consys_set_if_pinmux,
.consys_plt_tx_rx_bus_slp_prot_ctrl = consys_tx_rx_bus_slp_prot_ctrl,
.consys_plt_polling_consys_chipid = consys_polling_chipid,
.consys_plt_bus_clock_ctrl = consys_bus_clock_ctrl,
.consys_plt_d_die_cfg = connsys_d_die_cfg,
.consys_plt_conninfra_sysram_hw_ctrl = connsys_conninfra_sysram_hw_ctrl,
.consys_plt_spi_master_cfg = connsys_spi_master_cfg,
.consys_plt_a_die_cfg = connsys_a_die_cfg,
.consys_plt_afe_wbg_cal = connsys_afe_wbg_cal,
.consys_plt_subsys_pll_initial = connsys_subsys_pll_initial,
.consys_plt_osc_legacy_mode = connsys_osc_legacy_mode,
.consys_plt_top_pwr_ctrl = connsys_top_pwr_ctrl,
.consys_plt_conn_infra_bus_timeout = connsys_conn_infra_bus_timeout,
.consys_plt_clkgen_wpll_hw_ctrl = connsys_clkgen_wpll_hw_ctrl,
.consys_plt_conninfra_wakeup = consys_conninfra_top_wakeup,
.consys_plt_conninfra_sleep = consys_conninfra_top_sleep,
.consys_plt_adie_top_ck_en_on_off_ctrl = consys_adie_top_ck_en_on_off_ctrl,
.consys_plt_conninfra_wf_wakeup = consys_conninfra_wf_wakeup,
.consys_plt_conninfra_wf_sleep = consys_conninfra_wf_sleep,
.consys_plt_conn_wmcpu_sw_reset = consys_conn_wmcpu_sw_reset,
.consys_plt_wf_bus_slp_prot_ctrl = consys_wf_bus_slp_prot_ctrl,
.consys_plt_wfsys_top_on_ctrl = consys_wfsys_top_on_ctrl,
.consys_plt_wfsys_bus_slp_prot_check = consys_wfsys_bus_slp_prot_check,
.consys_plt_wfsys_bus_timeout_ctrl = consys_wfsys_bus_timeout_ctrl,
.consys_plt_conn_wmcpu_idle_loop_check = consys_wmcpu_idle_loop_check,
.consys_plt_wpll_ctrl = consys_wpll_ctrl,
.consys_plt_conninfra_wf_req_clr = consys_conninfra_wf_req_clr,
/* load from dts */
/* TODO: mtcmos should move to a independent module */
.consys_plt_clk_get_from_dts = NULL,
.consys_plt_clk_detach = NULL,
/* clock */
.consys_plt_soc_chipid_get = consys_soc_chipid_get,
/* debug */
.consys_plt_get_hw_ver = consys_get_hw_ver,
.consys_plt_spi_read = consys_spi_read,
.consys_plt_spi_write = consys_spi_write,
.consys_plt_spi_clock_switch = NULL,
.consys_plt_power_state = NULL,
/* others */
.consys_plt_adie_type_cfg = consys_plt_adie_type_cfg,
};
/* For mt7981 */
extern struct consys_hw_ops_struct g_consys_hw_ops_mt7981;
extern struct consys_reg_mng_ops g_dev_consys_reg_ops_mt7981;
extern struct consys_platform_emi_ops g_consys_platform_emi_ops_mt7981;
extern struct consys_platform_pmic_ops g_consys_platform_pmic_ops_mt7981;
const struct conninfra_plat_data mt7981_plat_data = {
.chip_id = PLATFORM_SOC_CHIP,
.hw_ops = &g_consys_hw_ops_mt7981,
.reg_ops = &g_dev_consys_reg_ops_mt7981,
.platform_emi_ops = &g_consys_platform_emi_ops_mt7981,
.platform_pmic_ops = &g_consys_platform_pmic_ops_mt7981,
};
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
unsigned int consys_soc_chipid_get(void)
{
return PLATFORM_SOC_CHIP;
}
unsigned int consys_get_hw_ver(void)
{
return CONN_IP_VER;
}

View File

@ -0,0 +1,172 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#include <linux/memblock.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/of_address.h>
#include <linux/random.h>
#include "consys_reg_mng.h"
#include "mt7981_consys_reg.h"
#include "mt7981_consys_reg_offset.h"
#include "consys_hw.h"
#include "consys_reg_util.h"
#define CFG_REG_LOAD_FROM_DTS_CTRL 0
static int consys_reg_init(struct platform_device *pdev);
static int consys_reg_deinit(void);
struct consys_base_addr conn_reg = {
.reg_base_addr[TOP_MISC_BASE] = {0x11D10000, 0x1000, 0},
.reg_base_addr[TOPRGU_BASE] = {0x1001C000, 0x1000, 0},
.reg_base_addr[GPIO_BASE] = {0x11D00000, 0x1000, 0},
.reg_base_addr[IOCFG_TM_BASE] = {0x11F00000, 0x1000, 0},
.reg_base_addr[IOCFG_LT_BASE] = {0x11F10000, 0x1000, 0},
.reg_base_addr[INFRACFG_AO_BASE] = {0x10003000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_CFG_BASE] = {0x18001000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_SYSRAM_BASE] = {0x18050000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_CLKGEN_ON_TOP_BASE] = {0x18009000, 0x1000, 0},
.reg_base_addr[CONN_HOST_CSR_TOP_BASE] = {0x18060000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_BUS_CR_BASE] = {0x1800E000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_RGU_BASE] = {0x18000000, 0x1000, 0},
.reg_base_addr[CONN_WT_SLP_CTL_REG_BASE] = {0x18005000, 0x1000, 0},
.reg_base_addr[INST2_CONN_WT_SLP_CTL_REG_BASE] = {0x18085000, 0x1000, 0},
.reg_base_addr[CONN_RF_SPI_MST_REG_BASE] = {0x18004000, 0x1000, 0},
.reg_base_addr[INST2_CONN_RF_SPI_MST_REG_BASE] = {0x18084000, 0x1000, 0},
.reg_base_addr[CONN_SEMAPHORE_BASE] = {0x18070000, 0x10000, 0},
.reg_base_addr[CONN_AFE_CTL_BASE] = {0x18003000, 0x1000, 0},
.reg_base_addr[CONN_AFE_CTL_2ND_BASE] = {0x18083000, 0x1000, 0},
.reg_base_addr[WF_TOP_SLPPROT_ON_BASE] = {0x184C0000, 0x10000, 0},
.reg_base_addr[WF_TOP_CFG_BASE] = {0x184B0000, 0x1000, 0},
.reg_base_addr[WF_MCU_CONFIG_LS_BASE] = {0x184F0000, 0x1000, 0},
.reg_base_addr[WF_MCU_BUS_CR_BASE] = {0x18400000, 0x1000, 0},
.reg_base_addr[WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE] = {0x18500000, 0x1000, 0},
.reg_base_addr[WF_TOP_CFG_ON_BASE] = {0x184C0000, 0x10000, 0},
};
const char* consys_base_addr_index_to_str[CONSYS_BASE_ADDR_MAX] = {
"TOP_MISC_BASE",
"TOPRGU_BASE",
"GPIO_BASE",
"IOCFG_TR_BASE",
"IOCFG_TL_BASE",
"INFRACFG_AO_BASE",
"CONN_INFRA_CFG_BASE",
"CONN_INFRA_SYSRAM_BASE",
"CONN_INFRA_CLKGEN_ON_TOP_BASE",
"CONN_HOST_CSR_TOP_BASE",
"CONN_INFRA_BUS_CR_BASE",
"CONN_INFRA_RGU_BASE",
"CONN_WT_SLP_CTL_REG_BASE",
"INST2_CONN_WT_SLP_CTL_REG_BASE",
"CONN_RF_SPI_MST_REG_BASE",
"INST2_CONN_RF_SPI_MST_REG_BASE",
"CONN_SEMAPHORE_BASE",
"CONN_AFE_CTL_BASE",
"CONN_AFE_CTL_2ND_BASE",
"WF_TOP_SLPPROT_ON_BASE",
"WF_TOP_CFG_BASE",
"WF_MCU_CONFIG_LS_BASE",
"WF_MCU_BUS_CR_BASE",
"WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE",
"WF_TOP_CFG_ON_BASE"
};
struct consys_reg_mng_ops g_dev_consys_reg_ops_mt7981 = {
.consys_reg_mng_init = consys_reg_init,
.consys_reg_mng_deinit = consys_reg_deinit,
.consys_reg_mng_check_reable = NULL,
.consys_reg_mng_is_consys_reg = NULL,
.consys_reg_mng_is_bus_hang = NULL,
.consys_reg_mng_dump_bus_status = NULL,
.consys_reg_mng_dump_conninfra_status = NULL,
.consys_reg_mng_dump_cpupcr = NULL,
.consys_reg_mng_is_host_csr = NULL,
};
struct consys_base_addr* get_conn_reg_base_addr()
{
return &conn_reg;
}
static int consys_reg_init(struct platform_device *pdev)
{
int ret = -1;
struct device_node *node = NULL;
struct consys_reg_base_addr *base_addr = NULL;
int i = 0;
node = pdev->dev.of_node;
if (node) {
#if (CFG_REG_LOAD_FROM_DTS_CTRL == 1)
struct resource res;
int flag;
for (i = 0; i < CONSYS_BASE_ADDR_MAX; i++) {
base_addr = &conn_reg.reg_base_addr[i];
ret = of_address_to_resource(node, i, &res);
if (ret) {
pr_err("Get Reg Index(%d-%s) failed\n", i, consys_base_addr_index_to_str[i]);
continue;
}
base_addr->phy_addr = res.start;
base_addr->vir_addr = (unsigned long)of_iomap(node, i);
of_get_address(node, i, &(base_addr->size), &flag);
#if 0
pr_info("Get Index(%d-%s) phy_addr(0x%zx) vir_addr=(0x%zx) size=(0x%zx)\n",
i, consys_base_addr_index_to_str[i], base_addr->phy_addr,
base_addr->vir_addr, base_addr->size);
#endif
}
#else
for (i = 0; i < CONSYS_BASE_ADDR_MAX; i++) {
base_addr = &conn_reg.reg_base_addr[i];
if (base_addr->vir_addr == 0)
base_addr->vir_addr = (unsigned long)ioremap(base_addr->phy_addr, base_addr->size);
pr_info("Get Index(%d-%s) phy_addr(0x%zx) vir_addr=(0x%zx) size=(0x%zx)\n",
i, consys_base_addr_index_to_str[i], base_addr->phy_addr,
base_addr->vir_addr, base_addr->size);
}
#endif
} else {
pr_err("[%s] can't find CONSYS compatible node\n", __func__);
return ret;
}
return 0;
}
static int consys_reg_deinit(void)
{
int i = 0;
for (i = 0; i < CONSYS_BASE_ADDR_MAX; i++) {
if (conn_reg.reg_base_addr[i].vir_addr) {
pr_info("[%d] Unmap %s (0x%zx)\n", i, consys_base_addr_index_to_str[i],
conn_reg.reg_base_addr[i].vir_addr);
iounmap((void __iomem*)conn_reg.reg_base_addr[i].vir_addr);
conn_reg.reg_base_addr[i].vir_addr = 0;
}
}
return 0;
}

View File

@ -0,0 +1,50 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/memblock.h>
#include <linux/platform_device.h>
#include <linux/of_reserved_mem.h>
#include "mt7981_emi.h"
#include "mt7981.h"
#include "mt7981_consys_reg.h"
#include "consys_hw.h"
#include "consys_reg_util.h"
#include "mt7981_pos.h"
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
unsigned int consys_emi_get_fw_emi_size(void)
{
return 0x100000;
}
struct consys_platform_emi_ops g_consys_platform_emi_ops_mt7981 = {
.consys_ic_emi_set_region_protection = consys_emi_set_region_protection,
.consys_ic_emi_set_remapping_reg = consys_emi_set_remapping_reg,
.consys_ic_emi_get_fw_emi_size = consys_emi_get_fw_emi_size,
};
struct consys_platform_emi_ops* get_consys_platform_emi_ops(void)
{
return &g_consys_platform_emi_ops_mt7981;
}

View File

@ -0,0 +1,95 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/memblock.h>
#include <linux/platform_device.h>
#include <linux/of_reserved_mem.h>
#include <linux/regulator/consumer.h>
#include <linux/notifier.h>
#include "consys_hw.h"
#include "consys_reg_util.h"
#include "osal.h"
#include "mt7981_pmic.h"
#include "mt7981_pos.h"
#include "mt7981_consys_reg.h"
#include "mt7981_consys_reg_offset.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
struct consys_platform_pmic_ops g_consys_platform_pmic_ops_mt7981 = {
.consys_pmic_get_from_dts = NULL,
.consys_pmic_common_power_ctrl = NULL,
.consys_pmic_wifi_power_ctrl = NULL,
.consys_pmic_bt_power_ctrl = NULL,
.consys_pmic_gps_power_ctrl = NULL,
.consys_pmic_fm_power_ctrl = NULL,
.consys_pmic_event_notifier = NULL,
};
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
struct consys_platform_pmic_ops* get_consys_platform_pmic_ops(void)
{
return &g_consys_platform_pmic_ops_mt7981;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,59 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7986_H_
#define _PLATFORM_MT7986_H_
enum
{
ADIE_TYPE_NONE = 0,
ADIE_TYPE_ONE,
ADIE_TYPE_TWO,
ADIE_TYPE_NUM_MAX
};
enum conn_semaphore_type
{
CONN_SEMA_CHIP_POWER_ON_INDEX = 0,
CONN_SEMA_CALIBRATION_INDEX = 1,
CONN_SEMA_FW_DL_INDEX = 2,
CONN_SEMA_CLOCK_SWITCH_INDEX = 3,
CONN_SEMA_CCIF_INDEX = 4,
CONN_SEMA_COEX_INDEX = 5,
CONN_SEMA_USB_EP0_INDEX = 6,
CONN_SEMA_USB_SHARED_INFO_INDEX = 7,
CONN_SEMA_USB_SUSPEND_INDEX = 8,
CONN_SEMA_USB_RESUME_INDEX = 9,
CONN_SEMA_PCIE_INDEX = 10,
CONN_SEMA_RFSPI_INDEX = 11,
CONN_SEMA_EFUSE_INDEX = 12,
CONN_SEMA_THERMAL_INDEX = 13,
CONN_SEMA_FLASH_INDEX = 14,
CONN_SEMA_DEBUG_INDEX = 15,
CONN_SEMA_WIFI_LP_INDEX = 16,
CONN_SEMA_PATCH_DL_INDEX = 17,
CONN_SEMA_SHARED_VAR_INDEX = 18,
CONN_SEMA_CONN_INFRA_COMMON_SYSRAM_INDEX = 19,
CONN_SEMA_NUM_MAX = 32 /* can't be omitted */
};
unsigned int consys_soc_chipid_get(void);
unsigned int consys_get_hw_ver(void);
#endif /* _PLATFORM_MT7986_H_ */

View File

@ -0,0 +1,132 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7986_CONSYS_REG_H_
#define _PLATFORM_MT7986_CONSYS_REG_H_
#include "consys_reg_base.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
enum consys_base_addr_index {
TOP_MISC_BASE = 0, /* top_misc */
TOPRGU_BASE = 1, /* TOPRGU */
GPIO_BASE = 2, /* GPIO */
IOCFG_TR_BASE = 3, /* IOCFG_TR */
IOCFG_TL_BASE = 4, /* IOCFG_TL */
INFRACFG_AO_BASE = 5, /* infracfg_ao_auto_gen_reg */
CONN_INFRA_CFG_BASE = 6, /* conn_infra_cfg */
CONN_INFRA_SYSRAM_BASE = 7, /* conn_infra_sysram */
CONN_INFRA_CLKGEN_ON_TOP_BASE = 8, /* conn_infra_clkgen_on_top */
CONN_HOST_CSR_TOP_BASE = 9, /* conn_host_csr_top */
CONN_INFRA_BUS_CR_BASE = 10, /* conn_infra_bus_cr */
CONN_INFRA_RGU_BASE = 11, /* conn_infra_rgu */
CONN_WT_SLP_CTL_REG_BASE = 12, /* conn_wt_slp_ctl_reg */
INST2_CONN_WT_SLP_CTL_REG_BASE = 13, /* Inst2_conn_wt_slp_ctl_reg */
CONN_RF_SPI_MST_REG_BASE = 14, /* conn_rf_spi_mst_reg */
INST2_CONN_RF_SPI_MST_REG_BASE = 15, /* Inst2_conn_rf_spi_mst_reg */
CONN_SEMAPHORE_BASE = 16, /* conn_semaphore */
CONN_AFE_CTL_BASE = 17, /* conn_afe_ctl */
CONN_AFE_CTL_2ND_BASE = 18, /* conn_afe_ctl_2nd */
WF_TOP_SLPPROT_ON_BASE = 19, /* wf_top_slpprot_on by remapping to 0x81020000 */
WF_TOP_CFG_BASE = 20, /* wf_top_cfg by remapping to 0x80020000 */
WF_MCU_CONFIG_LS_BASE = 21, /* wf_mcu_confg_ls by remapping to 0x88000000 */
WF_MCU_BUS_CR_BASE = 22, /* wf_mcu_bus_cr by remapping to 0x830C0XXX */
WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE = 23, /* wf_mcusys_infra_bus_full_u_debug_ctrl_ao by remapping to 0x810F0000 */
WF_TOP_CFG_ON_BASE = 24, /* wf_top_cfg_on by remapping to 0x81021000 */
CONSYS_BASE_ADDR_MAX
};
struct consys_base_addr {
struct consys_reg_base_addr reg_base_addr[CONSYS_BASE_ADDR_MAX];
};
extern struct consys_base_addr conn_reg;
#define REG_TOP_MISC_ADDR conn_reg.reg_base_addr[TOP_MISC_BASE].vir_addr
#define REG_TOP_RGU_ADDR conn_reg.reg_base_addr[TOPRGU_BASE].vir_addr
#define REG_GPIO_BASE_ADDR conn_reg.reg_base_addr[GPIO_BASE].vir_addr
#define REG_IOCFG_TR_ADDR conn_reg.reg_base_addr[IOCFG_TR_BASE].vir_addr
#define REG_IOCFG_TL_ADDR conn_reg.reg_base_addr[IOCFG_TL_BASE].vir_addr
#define REG_INFRACFG_AO_ADDR conn_reg.reg_base_addr[INFRACFG_AO_BASE].vir_addr
#define REG_CONN_INFRA_CFG_ADDR conn_reg.reg_base_addr[CONN_INFRA_CFG_BASE].vir_addr
#define REG_CONN_INFRA_SYSRAM_ADDR conn_reg.reg_base_addr[CONN_INFRA_SYSRAM_BASE].vir_addr
#define REG_CONN_INFRA_CLKGEN_ON_TOP_ADDR conn_reg.reg_base_addr[CONN_INFRA_CLKGEN_ON_TOP_BASE].vir_addr
#define REG_CONN_HOST_CSR_TOP_ADDR conn_reg.reg_base_addr[CONN_HOST_CSR_TOP_BASE].vir_addr
#define REG_CONN_INFRA_BUS_CR_ADDR conn_reg.reg_base_addr[CONN_INFRA_BUS_CR_BASE].vir_addr
#define REG_CONN_INFRA_RGU_ADDR conn_reg.reg_base_addr[CONN_INFRA_RGU_BASE].vir_addr
#define REG_CONN_WT_SLP_CTL_REG_ADDR conn_reg.reg_base_addr[CONN_WT_SLP_CTL_REG_BASE].vir_addr
#define REG_INST2_CONN_WT_SLP_CTL_REG_ADDR conn_reg.reg_base_addr[INST2_CONN_WT_SLP_CTL_REG_BASE].vir_addr
#define REG_CONN_RF_SPI_MST_REG_ADDR conn_reg.reg_base_addr[CONN_RF_SPI_MST_REG_BASE].vir_addr
#define REG_INST2_CONN_RF_SPI_MST_REG_ADDR conn_reg.reg_base_addr[INST2_CONN_RF_SPI_MST_REG_BASE].vir_addr
#define REG_CONN_SEMAPHORE_ADDR conn_reg.reg_base_addr[CONN_SEMAPHORE_BASE].vir_addr
#define REG_CONN_AFE_CTL_ADDR conn_reg.reg_base_addr[CONN_AFE_CTL_BASE].vir_addr
#define REG_CONN_AFE_CTL_2ND_ADDR conn_reg.reg_base_addr[CONN_AFE_CTL_2ND_BASE].vir_addr
#define REG_WF_TOP_SLPPROT_ON_ADDR conn_reg.reg_base_addr[WF_TOP_SLPPROT_ON_BASE].vir_addr
#define REG_WF_TOP_CFG_ADDR conn_reg.reg_base_addr[WF_TOP_CFG_BASE].vir_addr
#define REG_WF_MCU_CONFIG_LS_ADDR conn_reg.reg_base_addr[WF_MCU_CONFIG_LS_BASE].vir_addr
#define REG_WF_MCU_BUS_CR_ADDR conn_reg.reg_base_addr[WF_MCU_BUS_CR_BASE].vir_addr
#define REG_WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_ADDR conn_reg.reg_base_addr[WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE].vir_addr
#define REG_WF_TOP_CFG_ON_ADDR conn_reg.reg_base_addr[WF_TOP_CFG_ON_BASE].vir_addr
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
struct consys_base_addr* get_conn_reg_base_addr(void);
#endif /* _PLATFORM_MT7986_CONSYS_REG_H_ */

View File

@ -0,0 +1,243 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7986_CONSYS_REG_OFFSET_H_
#define _PLATFORM_MT7986_CONSYS_REG_OFFSET_H_
/**********************************************************************/
/* Base: TOP_MISC (0x11D1_0000) */
/**********************************************************************/
#define CONNSYS_MISC 0x0114
#define TOP_MISC_RSRV_ALL1_3 0x021C
/**********************************************************************/
/* Base: TOP RGU (0x1001_C000) */
/**********************************************************************/
#define TOP_RGU_WDT_SWSYSRST 0x0018
/**********************************************************************/
/* Base: GPIO (0x1001_F000) */
/**********************************************************************/
#define GPIO_MODE9 0x0390
#define GPIO_MODE10 0x03A0
#define GPIO_MODE11 0x03B0
#define GPIO_MODE12 0x03C0
/**********************************************************************/
/* Base: IOCFG_TR (0x11F0_0000) */
/**********************************************************************/
#define IOCFG_TR_DRV_CFG0 0x0000
#define IOCFG_TR_DRV_CFG1 0x0010
/**********************************************************************/
/* Base: IOCFG_TL (0x11F1_0000) */
/**********************************************************************/
#define IOCFG_TL_DRV_CFG0 0x0000
#define IOCFG_TL_DRV_CFG1 0x0010
/**********************************************************************/
/* Base: INFRACFG_AO (0x1000_3000) */
/**********************************************************************/
#define CONN2AP_GALS_SLPPROT 0x00D0
#define AP2CONN_GALS_SLPPROT 0x00D4
/**********************************************************************/
/* Base: CONN_INFRA_CFG (0x1800_1000) */
/**********************************************************************/
#define CONN_INFRA_CFG_IP_VERSION 0x0000
#define EFUSE 0x0020
#define ADIE_CTL 0x0030
#define CONN_INFRA_CFG_PWRCTRL0 0x0200
#define CONN_INFRA_CFG_RC_CTL_0 0x0380
#define OSC_CTL_0 0x0300
#define EMI_CTL_WF 0x0414
#define CONN_INFRA_WF_SLP_CTRL 0x0540
#define CONN_INFRA_WF_SLP_STATUS 0x0544
/**********************************************************************/
/* Base: CONN_INFRA_SYSRAM (0x1805_0000) */
/**********************************************************************/
#define SYSRAM_BASE_ADDR 0x0000
/**********************************************************************/
/* Base: CONN_INFRA_CLKGEN_ON_TOP (0x1800_9000) */
/**********************************************************************/
#define CKGEN_BUS_WPLL_DIV_1 0x0008
#define CKGEN_BUS_WPLL_DIV_2 0x000C
#define CKGEN_RFSPI_WPLL_DIV 0x0040
#define CKGEN_BUS 0x0A00
/**********************************************************************/
/* Base: CONN_HOST_CSR_TOP (0x1806_0000) */
/**********************************************************************/
#define CONN_INFRA_WAKEPU_TOP 0x01A0
#define CONN_INFRA_WAKEPU_WF 0x01A4
#define CONN2AP_REMAP_MCU_EMI 0x01C4
#define CONN2AP_REMAP_WF_PERI 0x01D4
#define DBG_DUMMY_3 0x02CC
/**********************************************************************/
/* Base: CONN_INFRA_BUS_CR (0x1800_E000) */
/**********************************************************************/
#define CONN_INFRA_BUS_OFF_TIMEOUT_CTRL 0x0300
#define CONN_INFRA_BUS_ON_TIMEOUT_CTRL 0x031C
#define CONN2AP_EMI_PATH_ADDR_START 0x0360
#define CONN2AP_EMI_PATH_ADDR_END 0x0364
/**********************************************************************/
/* Base: CONN_INFRA_RGU (0x1800_0000) */
/**********************************************************************/
#define WFSYS_ON_TOP_PWR_CTL 0x0010
#define BGFYS_ON_TOP_PWR_CTL 0x0020
#define SYSRAM_HWCTL_PDN 0x0050
#define SYSRAM_HWCTL_SLP 0x0054
#define WFSYS_CPU_SW_RST_B 0x0120
/**********************************************************************/
/* Base: CONN_WT_SLP_CTL_REG (0x1800_5000) */
/* Base: INST2_CONN_WT_SLP_CTL_REG (0x1808_5000) */
/**********************************************************************/
#define WB_WF_CK_ADDR 0x0070
#define WB_WF_WAKE_ADDR 0x0074
#define WB_WF_ZPS_ADDR 0x0078
#define WB_TOP_CK_ADDR 0x0084
#define WB_WF_B0_CMD_ADDR 0x008C
#define WB_WF_B1_CMD_ADDR 0x0090
#define WB_SLP_TOP_CK_0 0x0120
#define WB_SLP_TOP_CK_1 0x0124
/**********************************************************************/
/* Base: CONN_RF_SPI_MST_REG (0x1800_4000) */
/* Base: INST2_CONN_RF_SPI_MST_REG (0x1808_4000) */
/**********************************************************************/
#define SPI_STA 0x0000
#define SPI_WF_ADDR 0x0010
#define SPI_WF_WDAT 0x0014
#define SPI_WF_RDAT 0x0018
#define SPI_BT_ADDR 0x0020
#define SPI_BT_WDAT 0x0024
#define SPI_BT_RDAT 0x0028
#define SPI_FM_ADDR 0x0030
#define SPI_FM_WDAT 0x0034
#define SPI_FM_RDAT 0x0038
#define SPI_GPS_ADDR 0x0040
#define SPI_GPS_WDAT 0x0044
#define SPI_GPS_RDAT 0x0048
#define SPI_TOP_ADDR 0x0050
#define SPI_TOP_WDAT 0x0054
#define SPI_TOP_RDAT 0x0058
/**********************************************************************/
/* Base: CONN_SEMAPHORE_BASE (0x1807_0000) */
/**********************************************************************/
#define CONN_SEMA00_M2_OWN_STA 0x2000
#define CONN_SEMA00_M2_OWN_REL 0x2200
#define CONN_SEMA_OWN_BY_M0_STA_REP 0x0400
#define CONN_SEMA_OWN_BY_M1_STA_REP 0x1400
#define CONN_SEMA_OWN_BY_M2_STA_REP 0x2400
#define CONN_SEMA_OWN_BY_M3_STA_REP 0x3400
#define CONN_SEMA_OWN_BY_M4_STA_REP 0x4400
#define CONN_SEMA_OWN_BY_M5_STA_REP 0x5400
#define CONN_SEMA_OWN_BY_M6_STA_REP 0x6400
#define CONN_SEMA_OWN_BY_M7_STA_REP 0x7400
/**********************************************************************/
/* Base: CONN_AFE_CTL_BASE (0x1800_3000) */
/* Base: CONN_AFE_CTL_2ND_BASE (0x1808_3000) */
/**********************************************************************/
#define RG_DIG_EN_01 0x0000
#define RG_DIG_EN_02 0x0004
#define RG_DIG_EN_03 0x0008
#define RG_DIG_TOP_01 0x000C
#define RG_PLL_STB_TIME 0x00F4
/**********************************************************************/
/* Base: WF_TOP_SLPPROT_ON_BASE (0x8102_0000 remap to 0x184C_0000) */
/**********************************************************************/
#define WF_TOP_SLPPROT_ON_STATUS_READ 0x300C
/**********************************************************************/
/* Base: WF_TOP_CFG_BASE (0x8002_0000 remap to 0x184B_0000) */
/**********************************************************************/
#define WF_TOP_CFG_IP_VERSION 0x0010
/**********************************************************************/
/* Base: WF_MCU_CONFIG_LS_BASE (0x8800_0000 remap to 0x184F_0000) */
/**********************************************************************/
#define BUSHANGCR 0x0440
/**********************************************************************/
/* Base: WF_MCU_BUS_CR_BASE (0x830C_0XXX remap to 0x1840_0XXX) */
/**********************************************************************/
#define AP2WF_REMAP_1 0x0120
/**********************************************************************/
/* Base: WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE (0x810F_0000 remap to 0x1850_0000) */
/**********************************************************************/
#define WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_WFMCU_PWA_CTRL0 0x0000
/**********************************************************************/
/* Base: WF_TOP_CFG_ON_BASE (0x8102_1000 remap to 0x184C_0000) */
/**********************************************************************/
#define ROMCODE_INDEX 0x1604
/**********************************************************************/
/* A-die CR */
/**********************************************************************/
#define ATOP_CHIP_ID 0x02C
#define ATOP_TOP_CLK_EN 0xA00
#define ATOP_RG_ENCAL_WBTAC_IF_SW 0x070
#define ATOP_RG_WRI_CK_SELECT 0x4AC
#define ATOP_EFUSE_CTRL_1 0x108
#define ATOP_EFUSE_CTRL_2 0x148
#define ATOP_EFUSE_CTRL_3 0x14C
#define ATOP_EFUSE_CTRL_4 0x15C
#define ATOP_EFUSE_RDATA0 0x130
#define ATOP_EFUSE_RDATA1 0x134
#define ATOP_EFUSE_RDATA2 0x138
#define ATOP_EFUSE_RDATA3 0x13C
#define ATOP_RG_EFUSE_CFG5 0x144
#define ATOP_THADC_ANALOG 0x3A6
#define ATOP_THADC_SLOP 0x3A7
#define ATOP_RG_TOP_THADC_BG 0x034
#define ATOP_RG_TOP_THADC_00 0x038
#define ATOP_XTAL_TRIM_FLOW 0x3AC
#define ATOP_XTAL_CR_C1_SEL_AXM_80M_OSC 0x390
#define ATOP_XTAL_CR_C1_SEL_AXM_40M_OSC 0x391
#define ATOP_XTAL_CR_C1_SEL_AXM_TRIM1_80M_OSC 0x398
#define ATOP_XTAL_CR_C1_SEL_AXM_TRIM1_40M_OSC 0x399
#define ATOP_RG_STRAP_PIN_IN 0x4FC
#define ATOP_RG_XO_01 0x65C
#define ATOP_RG_XO_03 0x664
#define ATOP_7975_XTAL_CALIBRATION 0x3A1
#define ATOP_7975_XTAL_TRIM2_COMPENSATION 0x3A2
#define ATOP_7975_XTAL_TRIM3_COMPENSATION 0x3A3
#define ATOP_7975_XTAL_TRIM4_COMPENSATION 0x3A4
#define ATOP_7975_XTAL_TRIM_FLOW 0x3A5
#define ATOP_7975_CR_C1_C2_A94 0xA94
#define ATOP_7975_CR_C1_C2_A18 0xA18
#define ATOP_7975_CR_C1_C2_A84 0xA84
#define ATOP_7975_CR_C1_C2_AA4 0xAA4
#define ATOP_7975_CO_CLK 0xA1C
#endif /* _PLATFORM_MT7986_CONSYS_REG_OFFSET_H_ */

View File

@ -0,0 +1,72 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7986_EMI_H_
#define _PLATFORM_MT7986_EMI_H_
#include "osal.h"
#include "emi_mng.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
struct consys_platform_emi_ops* get_consys_platform_emi_ops(void);
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
#endif /* _PLATFORM_MT7986_EMI_H_ */

View File

@ -0,0 +1,72 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7986_PMIC_H_
#define _PLATFORM_MT7986_PMIC_H_
#include "osal.h"
#include "pmic_mng.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
struct consys_platform_pmic_ops* get_consys_platform_pmic_ops(void);
#endif /* _PLATFORM_MT7986_PMIC_H_ */

View File

@ -0,0 +1,64 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#ifndef _PLATFORM_MT7986_POS_H_
#define _PLATFORM_MT7986_POS_H_
int consys_plt_hw_init(void);
int consys_xtal_ctrl_fast_mode(void);
int consys_sw_reset_ctrl(bool bassert);
int consys_tx_rx_bus_slp_prot_ctrl(bool enable);
void consys_set_if_pinmux(bool enable);
int consys_polling_chipid(void);
int consys_plt_adie_type_check(void);
int consys_plt_adie_type_cfg(void);
int consys_bus_clock_ctrl(enum consys_drv_type drv_type, unsigned int bus_clock);
int consys_emi_set_remapping_reg(void);
int consys_emi_set_region_protection(void);
int connsys_d_die_cfg(void);
int connsys_conninfra_sysram_hw_ctrl(void);
int connsys_spi_master_cfg(void);
int consys_sema_acquire_timeout(unsigned int index, unsigned int usec);
void consys_sema_release(unsigned int index);
int consys_spi_read(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int *data);
int consys_spi_write(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int data);
int consys_spi_write_offset_range(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int value,
unsigned int reg_offset, unsigned int value_offset, unsigned int size);
int connsys_a_die_cfg(void);
int connsys_afe_wbg_cal(void);
int connsys_subsys_pll_initial(void);
int connsys_osc_legacy_mode(void);
int connsys_top_pwr_ctrl(void);
int connsys_conn_infra_bus_timeout(void);
int connsys_clkgen_wpll_hw_ctrl(void);
int consys_conninfra_top_wakeup(void);
int consys_conninfra_top_sleep(void);
int consys_adie_top_ck_en_on_off_ctrl(enum consys_drv_type type, unsigned char on);
int consys_conninfra_wf_wakeup(void);
int consys_conninfra_wf_sleep(void);
int consys_conn_wmcpu_sw_reset(bool bassert);
int consys_wf_bus_slp_prot_ctrl(bool enable);
int consys_wfsys_top_on_ctrl(bool enable);
int consys_wfsys_bus_slp_prot_check(bool enable);
int consys_wfsys_bus_timeout_ctrl(void);
int consys_wmcpu_idle_loop_check(void);
int consys_wpll_ctrl(bool enable);
int consys_conninfra_wf_req_clr(void);
#endif /* _PLATFORM_MT7986_POS_H_ */

View File

@ -0,0 +1,163 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/delay.h>
#include <linux/memblock.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/of_address.h>
#include "osal.h"
#include "conninfra.h"
#include "consys_hw.h"
#include "consys_reg_mng.h"
#include "consys_reg_util.h"
#include "mt7986.h"
#include "mt7986_pos.h"
#include "emi_mng.h"
#include "mt7986_consys_reg.h"
#include "mt7986_consys_reg_offset.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define PLATFORM_SOC_CHIP 0x7986
#define CONN_IP_VER 0x02070000
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
struct consys_hw_ops_struct g_consys_hw_ops_mt7986 = {
/* HW init */
.consys_plt_hw_init = consys_plt_hw_init,
/* POS */
.consys_plt_xtal_ctrl_fast_mode = consys_xtal_ctrl_fast_mode,
.consys_plt_connsys_sw_reset_ctrl = consys_sw_reset_ctrl,
.consys_plt_set_if_pinmux = consys_set_if_pinmux,
.consys_plt_tx_rx_bus_slp_prot_ctrl = consys_tx_rx_bus_slp_prot_ctrl,
.consys_plt_polling_consys_chipid = consys_polling_chipid,
.consys_plt_bus_clock_ctrl = consys_bus_clock_ctrl,
.consys_plt_d_die_cfg = connsys_d_die_cfg,
.consys_plt_conninfra_sysram_hw_ctrl = connsys_conninfra_sysram_hw_ctrl,
.consys_plt_spi_master_cfg = connsys_spi_master_cfg,
.consys_plt_a_die_cfg = connsys_a_die_cfg,
.consys_plt_afe_wbg_cal = connsys_afe_wbg_cal,
.consys_plt_subsys_pll_initial = connsys_subsys_pll_initial,
.consys_plt_osc_legacy_mode = connsys_osc_legacy_mode,
.consys_plt_top_pwr_ctrl = connsys_top_pwr_ctrl,
.consys_plt_conn_infra_bus_timeout = connsys_conn_infra_bus_timeout,
.consys_plt_clkgen_wpll_hw_ctrl = connsys_clkgen_wpll_hw_ctrl,
.consys_plt_conninfra_wakeup = consys_conninfra_top_wakeup,
.consys_plt_conninfra_sleep = consys_conninfra_top_sleep,
.consys_plt_adie_top_ck_en_on_off_ctrl = consys_adie_top_ck_en_on_off_ctrl,
.consys_plt_conninfra_wf_wakeup = consys_conninfra_wf_wakeup,
.consys_plt_conninfra_wf_sleep = consys_conninfra_wf_sleep,
.consys_plt_conn_wmcpu_sw_reset = consys_conn_wmcpu_sw_reset,
.consys_plt_wf_bus_slp_prot_ctrl = consys_wf_bus_slp_prot_ctrl,
.consys_plt_wfsys_top_on_ctrl = consys_wfsys_top_on_ctrl,
.consys_plt_wfsys_bus_slp_prot_check = consys_wfsys_bus_slp_prot_check,
.consys_plt_wfsys_bus_timeout_ctrl = consys_wfsys_bus_timeout_ctrl,
.consys_plt_conn_wmcpu_idle_loop_check = consys_wmcpu_idle_loop_check,
.consys_plt_wpll_ctrl = consys_wpll_ctrl,
.consys_plt_conninfra_wf_req_clr = consys_conninfra_wf_req_clr,
/* load from dts */
/* TODO: mtcmos should move to a independent module */
.consys_plt_clk_get_from_dts = NULL,
.consys_plt_clk_detach = NULL,
/* clock */
.consys_plt_soc_chipid_get = consys_soc_chipid_get,
/* debug */
.consys_plt_get_hw_ver = consys_get_hw_ver,
.consys_plt_spi_read = consys_spi_read,
.consys_plt_spi_write = consys_spi_write,
.consys_plt_spi_clock_switch = NULL,
.consys_plt_power_state = NULL,
/* others */
.consys_plt_adie_type_check = consys_plt_adie_type_check,
.consys_plt_adie_type_cfg = consys_plt_adie_type_cfg,
};
/* For mt7986 */
extern struct consys_hw_ops_struct g_consys_hw_ops_mt7986;
extern struct consys_reg_mng_ops g_dev_consys_reg_ops_mt7986;
extern struct consys_platform_emi_ops g_consys_platform_emi_ops_mt7986;
extern struct consys_platform_pmic_ops g_consys_platform_pmic_ops_mt7986;
const struct conninfra_plat_data mt7986_plat_data = {
.chip_id = PLATFORM_SOC_CHIP,
.hw_ops = &g_consys_hw_ops_mt7986,
.reg_ops = &g_dev_consys_reg_ops_mt7986,
.platform_emi_ops = &g_consys_platform_emi_ops_mt7986,
.platform_pmic_ops = &g_consys_platform_pmic_ops_mt7986,
};
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
unsigned int consys_soc_chipid_get(void)
{
return PLATFORM_SOC_CHIP;
}
unsigned int consys_get_hw_ver(void)
{
return CONN_IP_VER;
}

View File

@ -0,0 +1,172 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#include <linux/memblock.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/of_address.h>
#include <linux/random.h>
#include "consys_reg_mng.h"
#include "mt7986_consys_reg.h"
#include "mt7986_consys_reg_offset.h"
#include "consys_hw.h"
#include "consys_reg_util.h"
#define CFG_REG_LOAD_FROM_DTS_CTRL 0
static int consys_reg_init(struct platform_device *pdev);
static int consys_reg_deinit(void);
struct consys_base_addr conn_reg = {
.reg_base_addr[TOP_MISC_BASE] = {0x11D10000, 0x1000, 0},
.reg_base_addr[TOPRGU_BASE] = {0x1001C000, 0x1000, 0},
.reg_base_addr[GPIO_BASE] = {0x1001F000, 0x1000, 0},
.reg_base_addr[IOCFG_TR_BASE] = {0x11F00000, 0x1000, 0},
.reg_base_addr[IOCFG_TL_BASE] = {0x11F10000, 0x1000, 0},
.reg_base_addr[INFRACFG_AO_BASE] = {0x10003000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_CFG_BASE] = {0x18001000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_SYSRAM_BASE] = {0x18050000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_CLKGEN_ON_TOP_BASE] = {0x18009000, 0x1000, 0},
.reg_base_addr[CONN_HOST_CSR_TOP_BASE] = {0x18060000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_BUS_CR_BASE] = {0x1800E000, 0x1000, 0},
.reg_base_addr[CONN_INFRA_RGU_BASE] = {0x18000000, 0x1000, 0},
.reg_base_addr[CONN_WT_SLP_CTL_REG_BASE] = {0x18005000, 0x1000, 0},
.reg_base_addr[INST2_CONN_WT_SLP_CTL_REG_BASE] = {0x18085000, 0x1000, 0},
.reg_base_addr[CONN_RF_SPI_MST_REG_BASE] = {0x18004000, 0x1000, 0},
.reg_base_addr[INST2_CONN_RF_SPI_MST_REG_BASE] = {0x18084000, 0x1000, 0},
.reg_base_addr[CONN_SEMAPHORE_BASE] = {0x18070000, 0x10000, 0},
.reg_base_addr[CONN_AFE_CTL_BASE] = {0x18003000, 0x1000, 0},
.reg_base_addr[CONN_AFE_CTL_2ND_BASE] = {0x18083000, 0x1000, 0},
.reg_base_addr[WF_TOP_SLPPROT_ON_BASE] = {0x184C0000, 0x10000, 0},
.reg_base_addr[WF_TOP_CFG_BASE] = {0x184B0000, 0x1000, 0},
.reg_base_addr[WF_MCU_CONFIG_LS_BASE] = {0x184F0000, 0x1000, 0},
.reg_base_addr[WF_MCU_BUS_CR_BASE] = {0x18400000, 0x1000, 0},
.reg_base_addr[WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE] = {0x18500000, 0x1000, 0},
.reg_base_addr[WF_TOP_CFG_ON_BASE] = {0x184C0000, 0x10000, 0},
};
const char* consys_base_addr_index_to_str[CONSYS_BASE_ADDR_MAX] = {
"TOP_MISC_BASE",
"TOPRGU_BASE",
"GPIO_BASE",
"IOCFG_TR_BASE",
"IOCFG_TL_BASE",
"INFRACFG_AO_BASE",
"CONN_INFRA_CFG_BASE",
"CONN_INFRA_SYSRAM_BASE",
"CONN_INFRA_CLKGEN_ON_TOP_BASE",
"CONN_HOST_CSR_TOP_BASE",
"CONN_INFRA_BUS_CR_BASE",
"CONN_INFRA_RGU_BASE",
"CONN_WT_SLP_CTL_REG_BASE",
"INST2_CONN_WT_SLP_CTL_REG_BASE",
"CONN_RF_SPI_MST_REG_BASE",
"INST2_CONN_RF_SPI_MST_REG_BASE",
"CONN_SEMAPHORE_BASE",
"CONN_AFE_CTL_BASE",
"CONN_AFE_CTL_2ND_BASE",
"WF_TOP_SLPPROT_ON_BASE",
"WF_TOP_CFG_BASE",
"WF_MCU_CONFIG_LS_BASE",
"WF_MCU_BUS_CR_BASE",
"WF_MCUSYS_INFRA_BUS_FULL_U_DEBUG_CTRL_AO_BASE",
"WF_TOP_CFG_ON_BASE"
};
struct consys_reg_mng_ops g_dev_consys_reg_ops_mt7986 = {
.consys_reg_mng_init = consys_reg_init,
.consys_reg_mng_deinit = consys_reg_deinit,
.consys_reg_mng_check_reable = NULL,
.consys_reg_mng_is_consys_reg = NULL,
.consys_reg_mng_is_bus_hang = NULL,
.consys_reg_mng_dump_bus_status = NULL,
.consys_reg_mng_dump_conninfra_status = NULL,
.consys_reg_mng_dump_cpupcr = NULL,
.consys_reg_mng_is_host_csr = NULL,
};
struct consys_base_addr* get_conn_reg_base_addr()
{
return &conn_reg;
}
static int consys_reg_init(struct platform_device *pdev)
{
int ret = -1;
struct device_node *node = NULL;
struct consys_reg_base_addr *base_addr = NULL;
int i = 0;
node = pdev->dev.of_node;
if (node) {
#if (CFG_REG_LOAD_FROM_DTS_CTRL == 1)
struct resource res;
int flag;
for (i = 0; i < CONSYS_BASE_ADDR_MAX; i++) {
base_addr = &conn_reg.reg_base_addr[i];
ret = of_address_to_resource(node, i, &res);
if (ret) {
pr_err("Get Reg Index(%d-%s) failed\n", i, consys_base_addr_index_to_str[i]);
continue;
}
base_addr->phy_addr = res.start;
base_addr->vir_addr = (unsigned long)of_iomap(node, i);
of_get_address(node, i, &(base_addr->size), &flag);
#if 0
pr_info("Get Index(%d-%s) phy_addr(0x%zx) vir_addr=(0x%zx) size=(0x%zx)\n",
i, consys_base_addr_index_to_str[i], base_addr->phy_addr,
base_addr->vir_addr, base_addr->size);
#endif
}
#else
for (i = 0; i < CONSYS_BASE_ADDR_MAX; i++) {
base_addr = &conn_reg.reg_base_addr[i];
if (base_addr->vir_addr == 0)
base_addr->vir_addr = (unsigned long)ioremap(base_addr->phy_addr, base_addr->size);
pr_info("Get Index(%d-%s) phy_addr(0x%zx) vir_addr=(0x%zx) size=(0x%zx)\n",
i, consys_base_addr_index_to_str[i], base_addr->phy_addr,
base_addr->vir_addr, base_addr->size);
}
#endif
} else {
pr_err("[%s] can't find CONSYS compatible node\n", __func__);
return ret;
}
return 0;
}
static int consys_reg_deinit(void)
{
int i = 0;
for (i = 0; i < CONSYS_BASE_ADDR_MAX; i++) {
if (conn_reg.reg_base_addr[i].vir_addr) {
pr_info("[%d] Unmap %s (0x%zx)\n", i, consys_base_addr_index_to_str[i],
conn_reg.reg_base_addr[i].vir_addr);
iounmap((void __iomem*)conn_reg.reg_base_addr[i].vir_addr);
conn_reg.reg_base_addr[i].vir_addr = 0;
}
}
return 0;
}

View File

@ -0,0 +1,50 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/memblock.h>
#include <linux/platform_device.h>
#include <linux/of_reserved_mem.h>
#include "mt7986_emi.h"
#include "mt7986.h"
#include "mt7986_consys_reg.h"
#include "consys_hw.h"
#include "consys_reg_util.h"
#include "mt7986_pos.h"
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
unsigned int consys_emi_get_fw_emi_size(void)
{
return 0x100000;
}
struct consys_platform_emi_ops g_consys_platform_emi_ops_mt7986 = {
.consys_ic_emi_set_region_protection = consys_emi_set_region_protection,
.consys_ic_emi_set_remapping_reg = consys_emi_set_remapping_reg,
.consys_ic_emi_get_fw_emi_size = consys_emi_get_fw_emi_size,
};
struct consys_platform_emi_ops* get_consys_platform_emi_ops(void)
{
return &g_consys_platform_emi_ops_mt7986;
}

View File

@ -0,0 +1,95 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/memblock.h>
#include <linux/platform_device.h>
#include <linux/of_reserved_mem.h>
#include <linux/regulator/consumer.h>
#include <linux/notifier.h>
#include "consys_hw.h"
#include "consys_reg_util.h"
#include "osal.h"
#include "mt7986_pmic.h"
#include "mt7986_pos.h"
#include "mt7986_consys_reg.h"
#include "mt7986_consys_reg_offset.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
struct consys_platform_pmic_ops g_consys_platform_pmic_ops_mt7986 = {
.consys_pmic_get_from_dts = NULL,
.consys_pmic_common_power_ctrl = NULL,
.consys_pmic_wifi_power_ctrl = NULL,
.consys_pmic_bt_power_ctrl = NULL,
.consys_pmic_gps_power_ctrl = NULL,
.consys_pmic_fm_power_ctrl = NULL,
.consys_pmic_event_notifier = NULL,
};
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
struct consys_platform_pmic_ops* get_consys_platform_pmic_ops(void)
{
return &g_consys_platform_pmic_ops_mt7986;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,145 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#include "consys_hw.h"
#include "pmic_mng.h"
#include "osal.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
const struct consys_platform_pmic_ops* consys_platform_pmic_ops = NULL;
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
int pmic_mng_init(
struct platform_device *pdev,
struct conninfra_dev_cb* dev_cb,
const struct conninfra_plat_data* plat_data)
{
if (consys_platform_pmic_ops == NULL) {
consys_platform_pmic_ops = (const struct consys_platform_pmic_ops*)plat_data->platform_pmic_ops;
}
if (consys_platform_pmic_ops && consys_platform_pmic_ops->consys_pmic_get_from_dts)
consys_platform_pmic_ops->consys_pmic_get_from_dts(pdev, dev_cb);
return 0;
}
int pmic_mng_deinit(void)
{
return 0;
}
int pmic_mng_common_power_ctrl(unsigned int enable)
{
int ret = 0;
if (consys_platform_pmic_ops &&
consys_platform_pmic_ops->consys_pmic_common_power_ctrl)
ret = consys_platform_pmic_ops->consys_pmic_common_power_ctrl(enable);
return ret;
}
int pmic_mng_wifi_power_ctrl(unsigned int enable)
{
int ret = 0;
if (consys_platform_pmic_ops &&
consys_platform_pmic_ops->consys_pmic_wifi_power_ctrl)
ret = consys_platform_pmic_ops->consys_pmic_wifi_power_ctrl(enable);
return ret;
}
int pmic_mng_bt_power_ctrl(unsigned int enable)
{
int ret = 0;
if (consys_platform_pmic_ops &&
consys_platform_pmic_ops->consys_pmic_bt_power_ctrl)
ret = consys_platform_pmic_ops->consys_pmic_bt_power_ctrl(enable);
return ret;
}
int pmic_mng_gps_power_ctrl(unsigned int enable)
{
int ret = 0;
if (consys_platform_pmic_ops &&
consys_platform_pmic_ops->consys_pmic_gps_power_ctrl)
ret = consys_platform_pmic_ops->consys_pmic_gps_power_ctrl(enable);
return ret;
}
int pmic_mng_fm_power_ctrl(unsigned int enable)
{
int ret = 0;
if (consys_platform_pmic_ops &&
consys_platform_pmic_ops->consys_pmic_fm_power_ctrl)
ret = consys_platform_pmic_ops->consys_pmic_fm_power_ctrl(enable);
return ret;
}
int pmic_mng_event_cb(unsigned int id, unsigned int event)
{
if (consys_platform_pmic_ops &&
consys_platform_pmic_ops->consys_pmic_event_notifier)
consys_platform_pmic_ops->consys_pmic_event_notifier(id, event);
return 0;
}

View File

@ -0,0 +1,263 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#define pr_fmt(fmt) KBUILD_MODNAME "@(%s:%d) " fmt, __func__, __LINE__
#include <linux/platform_device.h>
#include <linux/cdev.h>
#include <linux/module.h>
#include <linux/fb.h>
#include <linux/workqueue.h>
#include <linux/delay.h>
#include <linux/ratelimit.h>
#include "conninfra.h"
#include "emi_mng.h"
#include "conninfra_core.h"
#include "consys_hw.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
#define CONNINFRA_RST_RATE_LIMIT 0
#if CONNINFRA_RST_RATE_LIMIT
DEFINE_RATELIMIT_STATE(g_rs, HZ, 1);
#define DUMP_LOG() if (__ratelimit(&g_rs)) \
pr_info("rst is ongoing\n")
#else
#define DUMP_LOG()
#endif
struct conninfra_rst_data {
enum consys_drv_type drv;
char *reason;
};
struct conninfra_rst_data rst_data;
void conninfra_get_emi_phy_addr(enum connsys_emi_type type, phys_addr_t* base, unsigned int *size)
{
struct consys_emi_addr_info* addr_info = emi_mng_get_phy_addr();
switch (type) {
case CONNSYS_EMI_FW:
if (base)
*base = addr_info->emi_ap_phy_base;
if (size)
*size = addr_info->fw_emi_size;
break;
default:
pr_err("Wrong EMI type: %d\n", type);
if (base)
*base = 0x0;
if (size)
*size = 0;
break;
}
}
EXPORT_SYMBOL(conninfra_get_emi_phy_addr);
int conninfra_pwr_on(enum consys_drv_type drv_type)
{
pr_info("[%s] drv=[%d]\n", __func__, drv_type);
if (conninfra_core_is_rst_locking()) {
DUMP_LOG();
return CONNINFRA_ERR_RST_ONGOING;
}
return conninfra_core_power_on(drv_type);
}
EXPORT_SYMBOL(conninfra_pwr_on);
int conninfra_pwr_off(enum consys_drv_type drv_type)
{
if (conninfra_core_is_rst_locking()) {
DUMP_LOG();
return CONNINFRA_ERR_RST_ONGOING;
}
return conninfra_core_power_off(drv_type);
}
EXPORT_SYMBOL(conninfra_pwr_off);
int conninfra_is_bus_hang(void)
{
if (conninfra_core_is_rst_locking()) {
DUMP_LOG();
return CONNINFRA_ERR_RST_ONGOING;
}
return conninfra_core_is_bus_hang();
}
EXPORT_SYMBOL(conninfra_is_bus_hang);
int conninfra_trigger_whole_chip_rst(enum consys_drv_type who, char *reason)
{
/* use schedule worker to trigger ??? */
/* so that function can be returned immediately */
int r;
r = conninfra_core_lock_rst();
if (r >= CHIP_RST_START) {
/* reset is ongoing */
pr_warn("r=[%d] chip rst is ongoing\n", r);
return 1;
}
pr_info("rst lock [%d] [%d] reason=%s\n", r, who, reason);
conninfra_core_trg_chip_rst(who, reason);
return 0;
}
EXPORT_SYMBOL(conninfra_trigger_whole_chip_rst);
int conninfra_sub_drv_ops_register(enum consys_drv_type type,
struct sub_drv_ops_cb *cb)
{
/* type validation */
if (type < 0 || type >= CONNDRV_TYPE_MAX) {
pr_err("incorrect drv type [%d]\n", type);
return -EINVAL;
}
pr_info("----\n");
conninfra_core_subsys_ops_reg(type, cb);
return 0;
}
EXPORT_SYMBOL(conninfra_sub_drv_ops_register);
int conninfra_sub_drv_ops_unregister(enum consys_drv_type type)
{
/* type validation */
if (type < 0 || type >= CONNDRV_TYPE_MAX) {
pr_err("[%s] incorrect drv type [%d]\n", __func__, type);
return -EINVAL;
}
pr_info("----\n");
conninfra_core_subsys_ops_unreg(type);
return 0;
}
EXPORT_SYMBOL(conninfra_sub_drv_ops_unregister);
int conninfra_spi_read(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int *data)
{
if (conninfra_core_is_rst_locking()) {
DUMP_LOG();
return CONNINFRA_ERR_RST_ONGOING;
}
if (subsystem >= SYS_SPI_MAX) {
pr_err("wrong subsys %d\n", subsystem);
return -EINVAL;
}
conninfra_core_spi_read(subsystem, addr, data);
return 0;
}
EXPORT_SYMBOL(conninfra_spi_read);
int conninfra_spi_write(enum sys_spi_subsystem subsystem, unsigned int addr, unsigned int data)
{
if (conninfra_core_is_rst_locking()) {
DUMP_LOG();
return CONNINFRA_ERR_RST_ONGOING;
}
if (subsystem >= SYS_SPI_MAX) {
pr_err("wrong subsys %d\n", subsystem);
return -EINVAL;
}
conninfra_core_spi_write(subsystem, addr, data);
return 0;
}
EXPORT_SYMBOL(conninfra_spi_write);
int conninfra_adie_top_ck_en_on(enum consys_drv_type type)
{
if (conninfra_core_is_rst_locking()) {
DUMP_LOG();
return CONNINFRA_ERR_RST_ONGOING;
}
return conninfra_core_adie_top_ck_en_on(type);
}
EXPORT_SYMBOL(conninfra_adie_top_ck_en_on);
int conninfra_adie_top_ck_en_off(enum consys_drv_type type)
{
if (conninfra_core_is_rst_locking()) {
DUMP_LOG();
return CONNINFRA_ERR_RST_ONGOING;
}
return conninfra_core_adie_top_ck_en_off(type);
}
EXPORT_SYMBOL(conninfra_adie_top_ck_en_off);
int conninfra_spi_clock_switch(enum connsys_spi_speed_type type)
{
return conninfra_core_spi_clock_switch(type);
}
EXPORT_SYMBOL(conninfra_spi_clock_switch);
int conninfra_debug_dump(void)
{
return conninfra_core_debug_dump();
}
EXPORT_SYMBOL(conninfra_debug_dump);

View File

@ -0,0 +1,344 @@
/*
* Copyright (C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*/
/*! \file
* \brief Declaration of library functions
*
* Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
*/
#include <linux/cdev.h>
#include <linux/delay.h>
#include <linux/fb.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/workqueue.h>
#include "conninfra.h"
#include "conninfra_core.h"
#include "consys_hw.h"
#include "emi_mng.h"
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define CONNINFRA_DEV_MAJOR 164
#define CONNINFRA_DEV_NUM 1
#define CONNINFRA_DRVIER_NAME "conninfra_drv"
#define CONNINFRA_DEVICE_NAME "conninfra_dev"
#define CONNINFRA_DEV_IOC_MAGIC 0xc2
#define CONNINFRA_IOCTL_GET_CHIP_ID _IOR(CONNINFRA_DEV_IOC_MAGIC, 0, int)
#define CONNINFRA_DEV_INIT_TO_MS (2 * 1000)
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
enum conninfra_init_status {
CONNINFRA_INIT_NOT_START,
CONNINFRA_INIT_START,
CONNINFRA_INIT_DONE,
};
static int g_conninfra_init_status = CONNINFRA_INIT_NOT_START;
static wait_queue_head_t g_conninfra_init_wq;
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
static int conninfra_dev_open(struct inode *inode, struct file *file);
static int conninfra_dev_close(struct inode *inode, struct file *file);
static ssize_t conninfra_dev_read(struct file *filp, char __user *buf,
size_t count, loff_t *f_pos);
static ssize_t conninfra_dev_write(struct file *filp,
const char __user *buf, size_t count,
loff_t *f_pos);
static long conninfra_dev_unlocked_ioctl(
struct file *filp, unsigned int cmd, unsigned long arg);
#ifdef CONFIG_COMPAT
static long conninfra_dev_compat_ioctl(
struct file *filp, unsigned int cmd, unsigned long arg);
#endif /* CONFIG_COMPAT */
static int conninfra_dev_suspend_cb(void);
static int conninfra_dev_resume_cb(void);
static int conninfra_dev_pmic_event_cb(unsigned int, unsigned int);
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
struct class *pConninfraClass;
struct device *pConninfraDev;
static struct cdev gConninfraCdev;
const struct file_operations gConninfraDevFops = {
.open = conninfra_dev_open,
.release = conninfra_dev_close,
.read = conninfra_dev_read,
.write = conninfra_dev_write,
.unlocked_ioctl = conninfra_dev_unlocked_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = conninfra_dev_compat_ioctl,
#endif /* CONFIG_COMPAT */
};
static int gConnInfraMajor = CONNINFRA_DEV_MAJOR;
/* screen on/off notification */
static struct conninfra_dev_cb gConninfraDevCb = {
.conninfra_suspend_cb = conninfra_dev_suspend_cb,
.conninfra_resume_cb = conninfra_dev_resume_cb,
.conninfra_pmic_event_notifier = conninfra_dev_pmic_event_cb,
};
/*******************************************************************************
* F U N C T I O N S
********************************************************************************
*/
int conninfra_dev_open(struct inode *inode, struct file *file)
{
static DEFINE_RATELIMIT_STATE(_rs, HZ, 1);
if (!wait_event_timeout(g_conninfra_init_wq, g_conninfra_init_status == CONNINFRA_INIT_DONE,
msecs_to_jiffies(CONNINFRA_DEV_INIT_TO_MS))) {
if (__ratelimit(&_rs)) {
pr_warn("wait_event_timeout (%d)ms,(%lu)jiffies,return -EIO\n",
CONNINFRA_DEV_INIT_TO_MS, msecs_to_jiffies(CONNINFRA_DEV_INIT_TO_MS));
}
return -EIO;
}
pr_info("open major %d minor %d (pid %d)\n",
imajor(inode), iminor(inode), current->pid);
return 0;
}
int conninfra_dev_close(struct inode *inode, struct file *file)
{
pr_info("close major %d minor %d (pid %d)\n",
imajor(inode), iminor(inode), current->pid);
return 0;
}
ssize_t conninfra_dev_read(struct file *filp, char __user *buf,
size_t count, loff_t *f_pos)
{
return 0;
}
ssize_t conninfra_dev_write(struct file *filp,
const char __user *buf, size_t count, loff_t *f_pos)
{
return 0;
}
static long conninfra_dev_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int retval = 0;
pr_info("[%s] cmd (%d),arg(%ld)\n", __func__, cmd, arg);
switch (cmd) {
case CONNINFRA_IOCTL_GET_CHIP_ID:
retval = consys_hw_chipid_get();
break;
}
return retval;
}
#ifdef CONFIG_COMPAT
static long conninfra_dev_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
long ret;
pr_info("[%s] cmd (%d)\n", __func__, cmd);
ret = conninfra_dev_unlocked_ioctl(filp, cmd, arg);
return ret;
}
#endif /* CONFIG_COMPAT */
static int conninfra_dev_suspend_cb(void)
{
return 0;
}
static int conninfra_dev_resume_cb(void)
{
conninfra_core_dump_power_state();
return 0;
}
static int conninfra_dev_pmic_event_cb(unsigned int id, unsigned int event)
{
conninfra_core_pmic_event_cb(id, event);
return 0;
}
/************************************************************************/
static int conninfra_dev_init(void)
{
dev_t devID = MKDEV(gConnInfraMajor, 0);
int cdevErr = -1;
int iret = 0;
g_conninfra_init_status = CONNINFRA_INIT_START;
init_waitqueue_head((wait_queue_head_t *)&g_conninfra_init_wq);
iret = register_chrdev_region(devID, CONNINFRA_DEV_NUM, CONNINFRA_DRVIER_NAME);
if (iret) {
pr_err("fail to register chrdev\n");
g_conninfra_init_status = CONNINFRA_INIT_NOT_START;
return -1;
}
cdev_init(&gConninfraCdev, &gConninfraDevFops);
gConninfraCdev.owner = THIS_MODULE;
cdevErr = cdev_add(&gConninfraCdev, devID, CONNINFRA_DEV_NUM);
if (cdevErr) {
pr_err("cdev_add() fails (%d)\n", cdevErr);
goto err1;
}
pConninfraClass = class_create(THIS_MODULE, CONNINFRA_DEVICE_NAME);
if (IS_ERR(pConninfraClass)) {
pr_err("class create fail, error code(%ld)\n", PTR_ERR(pConninfraClass));
goto err1;
}
pConninfraDev = device_create(pConninfraClass, NULL, devID, NULL, CONNINFRA_DEVICE_NAME);
if (IS_ERR(pConninfraDev)) {
pr_err("device create fail, error code(%ld)\n", PTR_ERR(pConninfraDev));
goto err2;
}
iret = mtk_conninfra_drv_init(&gConninfraDevCb);
if (iret) {
pr_err("init consys_hw fail, ret = %d\n", iret);
g_conninfra_init_status = CONNINFRA_INIT_NOT_START;
return -2;
}
iret = conninfra_core_init();
if (iret) {
pr_err("conninfra init fail\n");
g_conninfra_init_status = CONNINFRA_INIT_NOT_START;
return -3;
}
pr_info("ConnInfra Dev: init (%d)\n", iret);
g_conninfra_init_status = CONNINFRA_INIT_DONE;
#ifdef CONFIG_CONNINFRA_AUTO_UP
iret = conninfra_core_power_on(CONNDRV_TYPE_CONNINFRA);
if (iret) {
pr_err("conninfra auto load power on fail\n");
return -4;
}
#endif /* CONFIG_CONNINFRA_AUTO_UP */
return 0;
err2:
pr_err("[conninfra_dev_init] err2\n");
if (pConninfraClass) {
class_destroy(pConninfraClass);
pConninfraClass = NULL;
}
err1:
pr_err("[conninfra_dev_init] err1\n");
if (cdevErr == 0)
cdev_del(&gConninfraCdev);
if (iret == 0) {
unregister_chrdev_region(devID, CONNINFRA_DEV_NUM);
gConnInfraMajor = -1;
}
g_conninfra_init_status = CONNINFRA_INIT_NOT_START;
return -2;
}
static void conninfra_dev_deinit(void)
{
dev_t dev = MKDEV(gConnInfraMajor, 0);
int iret = 0;
#ifdef CONFIG_CONNINFRA_AUTO_UP
iret = conninfra_core_power_off(CONNDRV_TYPE_CONNINFRA);
if (iret) {
pr_err("conninfra auto load power off fail\n");
}
#endif /* CONFIG_CONNINFRA_AUTO_UP */
g_conninfra_init_status = CONNINFRA_INIT_NOT_START;
iret = conninfra_core_deinit();
iret = mtk_conninfra_drv_deinit();
if (pConninfraDev) {
device_destroy(pConninfraClass, dev);
pConninfraDev = NULL;
}
if (pConninfraClass) {
class_destroy(pConninfraClass);
pConninfraClass = NULL;
}
cdev_del(&gConninfraCdev);
unregister_chrdev_region(dev, CONNINFRA_DEV_NUM);
pr_info("ConnInfra: platform init (%d)\n", iret);
}
module_init(conninfra_dev_init);
module_exit(conninfra_dev_deinit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Willy.Yu @ CTD/SE5/CS5");
module_param(gConnInfraMajor, uint, 0644);

View File

@ -0,0 +1,33 @@
#
# Copyright (C) 2008-2010 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=leds-ws2812b
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
include $(INCLUDE_DIR)/package.mk
define KernelPackage/leds-ws2812b
SUBMENU:=LED modules
TITLE:=Worldsemi WS2812B (NeoPixel) LED support
FILES:= \
$(PKG_BUILD_DIR)/leds-ws2812b.ko
AUTOLOAD:=$(call AutoProbe,leds-ws2812b,1)
endef
define KernelPackage/leds-ws2812b/description
LED support for driving WS2812B (NeoPixel) using SPI MOSI.
endef
define Build/Compile
$(KERNEL_MAKE) M="$(PKG_BUILD_DIR)" modules
endef
$(eval $(call KernelPackage,leds-ws2812b))

View File

@ -0,0 +1 @@
obj-m := leds-ws2812b.o

View File

@ -0,0 +1,240 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* WorldSemi WS2812B individually-addressable LED driver using SPI
*
* Copyright 2022 Chuanhong Guo <gch981213@gmail.com>
*
* This driver simulates WS2812B protocol using SPI MOSI pin. A one pulse
* is transferred as 3'b110 and a zero pulse is 3'b100. For this driver to
* work properly, the SPI frequency should be 2.105MHz~2.85MHz and it needs
* to transfer all the bytes continuously.
*/
#include <linux/led-class-multicolor.h>
#include <linux/leds.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/property.h>
#include <linux/spi/spi.h>
#include <linux/mutex.h>
#define WS2812B_BYTES_PER_COLOR 3
#define WS2812B_NUM_COLORS 3
/* A continuous 0 for 50us+ as the 'reset' signal */
#define WS2812B_RESET_LEN 14
struct ws2812b_led {
struct led_classdev_mc mc_cdev;
struct mc_subled subled[WS2812B_NUM_COLORS];
int cascade;
};
struct ws2812b_priv {
struct led_classdev ldev;
struct spi_device *spi;
struct mutex mutex;
int num_leds;
size_t data_len;
u8 *data_buf;
struct ws2812b_led leds[];
};
/**
* ws2812b_set_byte - convert a byte of data to 3-byte SPI data for pulses
* @priv: pointer to the private data structure
* @offset: offset of the target byte in the data stream
* @val: 1-byte data to be set
*
* WS2812B receives a stream of bytes from DI, takes the first 3 byte as LED
* brightness and pases the rest to the next LED through the DO pin.
* This function assembles a single byte of data to the LED:
* A bit is represented with a pulse of specific length. A long pulse is a 1
* and a short pulse is a 0.
* SPI transfers data continuously, MSB first. We can send 3'b100 to create a
* 0 pulse and 3'b110 for a 1 pulse. In this way, a byte of data takes up 3
* bytes in a SPI transfer:
* 1x0 1x0 1x0 1x0 1x0 1x0 1x0 1x0
* Let's rearrange it in 8 bits:
* 1x01x01x 01x01x01 x01x01x0
* The higher 3 bits, middle 2 bits and lower 3 bits are represented with the
* 1st, 2nd and 3rd byte in the SPI transfer respectively.
* There are only 8 combinations for 3 bits and 4 for 2 bits, so we can create
* a lookup table for the 3 bytes.
* e.g. For 0x6b -> 2'b01101011:
* Bit 7-5: 3'b011 -> 10011011 -> 0x9b
* Bit 4-3: 2'b01 -> 01001101 -> 0x4d
* Bit 2-0: 3'b011 -> 00110110 -> 0x36
*/
static void ws2812b_set_byte(struct ws2812b_priv *priv, size_t offset, u8 val)
{
/* The lookup table for Bit 7-5 4-3 2-0 */
const u8 h3b[] = { 0x92, 0x93, 0x9a, 0x9b, 0xd2, 0xd3, 0xda, 0xdb };
const u8 m2b[] = { 0x49, 0x4d, 0x69, 0x6d };
const u8 l3b[] = { 0x24, 0x26, 0x34, 0x36, 0xa4, 0xa6, 0xb4, 0xb6 };
u8 *p = priv->data_buf + WS2812B_RESET_LEN + (offset * WS2812B_BYTES_PER_COLOR);
p[0] = h3b[val >> 5]; /* Bit 7-5 */
p[1] = m2b[(val >> 3) & 0x3]; /* Bit 4-3 */
p[2] = l3b[val & 0x7]; /* Bit 2-0 */
}
static int ws2812b_set(struct led_classdev *cdev,
enum led_brightness brightness)
{
struct led_classdev_mc *mc_cdev = lcdev_to_mccdev(cdev);
struct ws2812b_led *led =
container_of(mc_cdev, struct ws2812b_led, mc_cdev);
struct ws2812b_priv *priv = dev_get_drvdata(cdev->dev->parent);
int ret;
int i;
led_mc_calc_color_components(mc_cdev, brightness);
mutex_lock(&priv->mutex);
for (i = 0; i < WS2812B_NUM_COLORS; i++)
ws2812b_set_byte(priv, led->cascade * WS2812B_NUM_COLORS + i,
led->subled[i].brightness);
ret = spi_write(priv->spi, priv->data_buf, priv->data_len);
mutex_unlock(&priv->mutex);
return ret;
}
static int ws2812b_probe(struct spi_device *spi)
{
struct device *dev = &spi->dev;
int cur_led = 0;
struct ws2812b_priv *priv;
struct fwnode_handle *led_node;
int num_leds, i, cnt, ret;
num_leds = device_get_child_node_count(dev);
priv = devm_kzalloc(dev, struct_size(priv, leds, num_leds), GFP_KERNEL);
if (!priv)
return -ENOMEM;
priv->data_len =
num_leds * WS2812B_BYTES_PER_COLOR * WS2812B_NUM_COLORS +
WS2812B_RESET_LEN;
priv->data_buf = kzalloc(priv->data_len, GFP_KERNEL);
if (!priv->data_buf)
return -ENOMEM;
for (i = 0; i < num_leds * WS2812B_NUM_COLORS; i++)
ws2812b_set_byte(priv, i, 0);
mutex_init(&priv->mutex);
priv->num_leds = num_leds;
priv->spi = spi;
device_for_each_child_node(dev, led_node) {
struct led_init_data init_data = {
.fwnode = led_node,
};
/* WS2812B LEDs usually come with GRB color */
u32 color_idx[WS2812B_NUM_COLORS] = {
LED_COLOR_ID_GREEN,
LED_COLOR_ID_RED,
LED_COLOR_ID_BLUE,
};
u32 color_intensity[WS2812B_NUM_COLORS] = { 255, 255, 255, };
u32 cascade;
ret = fwnode_property_read_u32(led_node, "reg", &cascade);
if (ret) {
dev_err(dev, "failed to obtain numerical LED index for %s",
fwnode_get_name(led_node));
goto ERR_UNREG_LEDS;
}
if (cascade >= num_leds) {
dev_err(dev, "LED index of %s is larger than the number of LEDs.",
fwnode_get_name(led_node));
ret = -EINVAL;
goto ERR_UNREG_LEDS;
}
cnt = fwnode_property_count_u32(led_node, "color-index");
if (cnt > 0 && cnt <= WS2812B_NUM_COLORS)
fwnode_property_read_u32_array(led_node, "color-index",
color_idx, (size_t)cnt);
cnt = fwnode_property_count_u32(led_node, "color-intensity");
if (cnt > 0 && cnt <= WS2812B_NUM_COLORS)
fwnode_property_read_u32_array(led_node, "color-intensity",
color_intensity, (size_t)cnt);
priv->leds[cur_led].mc_cdev.subled_info =
priv->leds[cur_led].subled;
priv->leds[cur_led].mc_cdev.num_colors = WS2812B_NUM_COLORS;
priv->leds[cur_led].mc_cdev.led_cdev.max_brightness = 255;
priv->leds[cur_led].mc_cdev.led_cdev.brightness_set_blocking = ws2812b_set;
for (i = 0; i < WS2812B_NUM_COLORS; i++) {
priv->leds[cur_led].subled[i].color_index = color_idx[i];
priv->leds[cur_led].subled[i].intensity = color_intensity[i];
}
priv->leds[cur_led].cascade = cascade;
ret = led_classdev_multicolor_register_ext(
dev, &priv->leds[cur_led].mc_cdev, &init_data);
if (ret) {
dev_err(dev, "registration of %s failed.",
fwnode_get_name(led_node));
goto ERR_UNREG_LEDS;
}
cur_led++;
}
spi_set_drvdata(spi, priv);
return 0;
ERR_UNREG_LEDS:
for (; cur_led >= 0; cur_led--)
led_classdev_multicolor_unregister(&priv->leds[cur_led].mc_cdev);
mutex_destroy(&priv->mutex);
kfree(priv->data_buf);
return ret;
}
static int ws2812b_remove(struct spi_device *spi)
{
struct ws2812b_priv *priv = spi_get_drvdata(spi);
int cur_led;
for (cur_led = priv->num_leds - 1; cur_led >= 0; cur_led--)
led_classdev_multicolor_unregister(&priv->leds[cur_led].mc_cdev);
kfree(priv->data_buf);
mutex_destroy(&priv->mutex);
return 0;
}
static const struct spi_device_id ws2812b_spi_ids[] = {
{ "ws2812b" },
{},
};
MODULE_DEVICE_TABLE(spi, ws2812b_spi_ids);
static const struct of_device_id ws2812b_dt_ids[] = {
{ .compatible = "worldsemi,ws2812b" },
{},
};
MODULE_DEVICE_TABLE(of, ws2812b_dt_ids);
static struct spi_driver ws2812b_driver = {
.probe = ws2812b_probe,
.remove = ws2812b_remove,
.id_table = ws2812b_spi_ids,
.driver = {
.name = KBUILD_MODNAME,
.of_match_table = ws2812b_dt_ids,
},
};
module_spi_driver(ws2812b_driver);
MODULE_AUTHOR("Chuanhong Guo <gch981213@gmail.com>");
MODULE_DESCRIPTION("WS2812B LED driver using SPI");
MODULE_LICENSE("GPL");

View File

@ -0,0 +1,14 @@
#
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=Universal Plug & Play configuration module
LUCI_DEPENDS:=+miniupnpd
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -0,0 +1,74 @@
'use strict';
'require baseclass';
'require dom';
'require rpc';
'require uci';
var callUpnpGetStatus, callUpnpDeleteRule, handleDelRule;
callUpnpGetStatus = rpc.declare({
object: 'luci.upnp',
method: 'get_status',
expect: { }
});
callUpnpDeleteRule = rpc.declare({
object: 'luci.upnp',
method: 'delete_rule',
params: [ 'token' ],
expect: { result : "OK" },
});
handleDelRule = function(num, ev) {
dom.parent(ev.currentTarget, '.tr').style.opacity = 0.5;
ev.currentTarget.classList.add('spinning');
ev.currentTarget.disabled = true;
ev.currentTarget.blur();
callUpnpDeleteRule(num);
};
return baseclass.extend({
title: _('Active UPnP Redirects'),
load: function() {
return Promise.all([
callUpnpGetStatus(),
]);
},
render: function(data) {
var table = E('table', { 'class': 'table', 'id': 'upnp_status_table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, _('Protocol')),
E('th', { 'class': 'th' }, _('External Port')),
E('th', { 'class': 'th' }, _('Client Address')),
E('th', { 'class': 'th' }, _('Host')),
E('th', { 'class': 'th' }, _('Client Port')),
E('th', { 'class': 'th' }, _('Description')),
E('th', { 'class': 'th cbi-section-actions' }, '')
])
]);
var rules = Array.isArray(data[0].rules) ? data[0].rules : [];
var rows = rules.map(function(rule) {
return [
rule.proto,
rule.extport,
rule.intaddr,
rule.host_hint || _('Unknown'),
rule.intport,
rule.descr,
E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num)
}, [ _('Delete') ])
];
});
cbi_update_table(table, rows, E('em', _('There are no active redirects.')));
return table;
}
});

View File

@ -0,0 +1,215 @@
'use strict';
'require view';
'require dom';
'require poll';
'require uci';
'require rpc';
'require form';
var callInitAction, callUpnpGetStatus, callUpnpDeleteRule, handleDelRule;
callInitAction = rpc.declare({
object: 'luci',
method: 'setInitAction',
params: [ 'name', 'action' ],
expect: { result: false }
});
callUpnpGetStatus = rpc.declare({
object: 'luci.upnp',
method: 'get_status',
expect: { }
});
callUpnpDeleteRule = rpc.declare({
object: 'luci.upnp',
method: 'delete_rule',
params: [ 'token' ],
expect: { result : "OK" },
});
handleDelRule = function(num, ev) {
dom.parent(ev.currentTarget, '.tr').style.opacity = 0.5;
ev.currentTarget.classList.add('spinning');
ev.currentTarget.disabled = true;
ev.currentTarget.blur();
callUpnpDeleteRule(num);
};
return view.extend({
load: function() {
return Promise.all([
callUpnpGetStatus(),
uci.load('upnpd')
]);
},
poll_status: function(nodes, data) {
var rules = Array.isArray(data[0].rules) ? data[0].rules : [];
var rows = rules.map(function(rule) {
return [
rule.proto,
rule.extport,
rule.intaddr,
rule.host_hint || _('Unknown'),
rule.intport,
rule.descr,
E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num)
}, [ _('Delete') ])
];
});
cbi_update_table(nodes.querySelector('#upnp_status_table'), rows, E('em', _('There are no active redirects.')));
return;
},
render: function(data) {
var m, s, o;
m = new form.Map('upnpd', [_('Universal Plug & Play')],
_('UPnP allows clients in the local network to automatically configure the router.'));
s = m.section(form.GridSection, '_active_rules');
s.render = L.bind(function(view, section_id) {
var table = E('table', { 'class': 'table cbi-section-table', 'id': 'upnp_status_table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, _('Protocol')),
E('th', { 'class': 'th' }, _('External Port')),
E('th', { 'class': 'th' }, _('Client Address')),
E('th', { 'class': 'th' }, _('Host')),
E('th', { 'class': 'th' }, _('Client Port')),
E('th', { 'class': 'th' }, _('Description')),
E('th', { 'class': 'th cbi-section-actions' }, '')
])
]);
var rules = Array.isArray(data[0].rules) ? data[0].rules : [];
var rows = rules.map(function(rule) {
return [
rule.proto,
rule.extport,
rule.intaddr,
rule.host_hint || _('Unknown'),
rule.intport,
rule.descr,
E('button', {
'class': 'btn cbi-button-remove',
'click': L.bind(handleDelRule, this, rule.num)
}, [ _('Delete') ])
];
});
cbi_update_table(table, rows, E('em', _('There are no active redirects.')));
return E('div', { 'class': 'cbi-section cbi-tblsection' }, [
E('h3', _('Active UPnP Redirects')), table ]);
}, o, this);
s = m.section(form.NamedSection, 'config', 'upnpd', _('MiniUPnP settings'));
s.addremove = false;
s.tab('general', _('General Settings'));
s.tab('advanced', _('Advanced Settings'));
o = s.taboption('general', form.Flag, 'enabled', _('Start UPnP and NAT-PMP service'));
o.rmempty = false;
s.taboption('general', form.Flag, 'enable_upnp', _('Enable UPnP functionality')).default = '1'
s.taboption('general', form.Flag, 'enable_natpmp', _('Enable NAT-PMP functionality')).default = '1'
s.taboption('general', form.Flag, 'secure_mode', _('Enable secure mode'),
_('Allow adding forwards only to requesting ip addresses')).default = '1'
s.taboption('general', form.Flag, 'igdv1', _('Enable IGDv1 mode'),
_('Advertise as IGDv1 device instead of IGDv2')).default = '0'
s.taboption('general', form.Flag, 'log_output', _('Enable additional logging'),
_('Puts extra debugging information into the system log'))
s.taboption('general', form.Value, 'download', _('Downlink'),
_('Value in KByte/s, informational only')).rmempty = true
s.taboption('general', form.Value, 'upload', _('Uplink'),
_('Value in KByte/s, informational only')).rmempty = true
o = s.taboption('general', form.Value, 'port', _('Port'))
o.datatype = 'port'
o.default = 5000
s.taboption('advanced', form.Flag, 'system_uptime', _('Report system instead of daemon uptime')).default = '1'
s.taboption('advanced', form.Value, 'uuid', _('Device UUID'))
s.taboption('advanced', form.Value, 'serial_number', _('Announced serial number'))
s.taboption('advanced', form.Value, 'model_number', _('Announced model number'))
o = s.taboption('advanced', form.Value, 'notify_interval', _('Notify interval'))
o.datatype = 'uinteger'
o.placeholder = 30
o = s.taboption('advanced', form.Value, 'clean_ruleset_threshold', _('Clean rules threshold'))
o.datatype = 'uinteger'
o.placeholder = 20
o = s.taboption('advanced', form.Value, 'clean_ruleset_interval', _('Clean rules interval'))
o.datatype = 'uinteger'
o.placeholder = 600
o = s.taboption('advanced', form.Value, 'presentation_url', _('Presentation URL'))
o.placeholder = 'http://192.168.1.1/'
o = s.taboption('advanced', form.Value, 'upnp_lease_file', _('UPnP lease file'))
o.placeholder = '/var/run/miniupnpd.leases'
s.taboption('advanced', form.Flag, 'use_stun', _('Use STUN'))
o = s.taboption('advanced', form.Value, 'stun_host', _('STUN Host'))
o.depends('use_stun', '1');
o.datatype = 'host'
o = s.taboption('advanced', form.Value, 'stun_port', _('STUN Port'))
o.depends('use_stun', '1');
o.datatype = 'port'
o.placeholder = '0-65535'
s = m.section(form.GridSection, 'perm_rule', _('MiniUPnP ACLs'),
_('ACLs specify which external ports may be redirected to which internal addresses and ports'))
s.sortable = true
s.anonymous = true
s.addremove = true
s.option(form.Value, 'comment', _('Comment'))
o = s.option(form.Value, 'ext_ports', _('External ports'))
o.datatype = 'portrange'
o.placeholder = '0-65535'
o = s.option(form.Value, 'int_addr', _('Internal addresses'))
o.datatype = 'ip4addr'
o.placeholder = '0.0.0.0/0'
o = s.option(form.Value, 'int_ports', _('Internal ports'))
o.datatype = 'portrange'
o.placeholder = '0-65535'
o = s.option(form.ListValue, 'action', _('Action'))
o.value('allow')
o.value('deny')
return m.render().then(L.bind(function(m, nodes) {
poll.add(L.bind(function() {
return Promise.all([
callUpnpGetStatus()
]).then(L.bind(this.poll_status, this, nodes));
}, this), 5);
return nodes;
}, this, m));
}
});

View File

@ -0,0 +1,230 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2021-03-04 13:50+0000\n"
"Last-Translator: Said Zakaria <said.zakaria@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ar/>\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 4.5.1-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "إجراء"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "إعدادات متقدمة"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "تعليق"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "احدف"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "الوصف"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "الاعدادات العامة"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "ضيف"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "المنفذ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "بروتوكول"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "مجهول"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,229 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2021-09-27 22:36+0000\n"
"Last-Translator: Iskren Mihaylov <iskren.mihaylov91@gmail.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/bg/>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.9-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Действие"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Разширени настройки"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Коментар"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Изтрий"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Описание"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Основни настройки"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Протокол"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,229 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2021-10-08 18:54+0000\n"
"Last-Translator: Rayhan Nabi <rayhanjanam@gmail.com>\n"
"Language-Team: Bengali (Bangladesh) <https://hosted.weblate.org/projects/"
"openwrt/luciapplicationsupnp/bn_BD/>\n"
"Language: bn_BD\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.9-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "উন্নত সেটিংস"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "বর্ণনা"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "সাধারণ সেটিংস"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "পোর্ট"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "প্রোটোকল"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "অজানা"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,235 @@
# upnp.pot
# generated from ./applications/luci-upnp/luasrc/i18n/upnp.en.lua
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:40+0200\n"
"PO-Revision-Date: 2021-09-17 06:52+0000\n"
"Last-Translator: Roger Pueyo Centelles <weblate@rogerpueyo.com>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ca/>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.9-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Els ACL especifiquen quins ports externs es poden redirigir a quines adreces "
"i ports interns"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Acció"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redireccions UPnP actives"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Configuració avançada"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Permet que s'afegeixin redireccions només a les adreces IP peticionant"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Número de model anunciat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Número de sèrie anunciat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Interval de neteja de regles"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Llindar de neteja de regles"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Adreça de client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port de client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Commentari"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Suprimeix"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descripció"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID de dispositiu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Enllaç de baixada"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Habilita la funcionalitat NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Habilita la funcionalitat UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Habilita el registre addicional"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Habilita mode segur"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Port extern"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Ports externs"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Paràmetres generals"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Amfitrió"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Adreces internes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Ports interns"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs de MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Ajusts de MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interval de notificació"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protocol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Posa informació extra de depuració en el registre de sistema"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Reporta el temps actiu del sistema en lloc del del dimoni"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Inicia el servei UPnP i NAP-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "No hi ha redireccions actives."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permet als clients de la xarxa local configurar automàticament el "
"router."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Fitxer d'arrendament UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Desconegut"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Enllaç de pujada"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valor en KByte/s, només per informació"

View File

@ -0,0 +1,230 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2020-10-27 21:26+0000\n"
"Last-Translator: Lukas Jelinek <lukas.jelinek@nic.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/cs/>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 4.3.2-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL stanovují, které vnější porty by měly být přesměrovány na které vnitřní "
"adresy a porty"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Akce"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktivní přesměrování UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Pokročilá nastavení"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Inzerovat jako IGDv1 zařízení místo IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Povolit přesměrování pouze na dotazující ip adresy"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Oznámené číslo modelu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Oznámené sériové číslo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Interval čištění pravidel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Práh čištění pravidel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Adresa klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Komentář"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Odstranit"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Popis"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID zařízení"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Povolit režim IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Povolit funkčnost NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Povolit funkčnost UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Povolit přídavné logování"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Povolit bezpečný režim"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Vnější port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Vnější porty"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Obecná nastavení"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Hostitel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Vnitřní adresy"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Vnitřní porty"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL listy"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Nastavení MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interval oznamování"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Prezentační URL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Vypisovat extra ladící informace do systémového záznamu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Hlásit uptime systému namísto uptime daemonu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Spustit službu UPnP a NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Neexistují žádná aktivní přesměrování."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP umožňuje klientům v místní síti automaticky nakonfigurovat router."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Soubor UPnP výpůjček"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Univerzální Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Neznámé"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Pouze informační hodnoty (v KByte/s)"

View File

@ -0,0 +1,233 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2021-11-13 08:12+0000\n"
"Last-Translator: drax red <drax@outlook.dk>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/da/>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.9.1-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL'er angiver, hvilke eksterne porte der kan omdirigeres til hvilke interne "
"adresser og porte"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Handling"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktive UPnP-omdirigeringer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Avancerede indstillinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Annoncerer som IGDv1-enhed i stedet for IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Tillad kun at tilføje viderestillinger til ip-adresser, der anmoder om"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Annonceret modelnummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Annonceret serienummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Interval for rene regler"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Tærskel for rene regler"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Klient adresse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Klient port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Slet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Beskrivelse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Enhedens UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Aktiver IGDv1-tilstand"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Aktiver NAT-PMP-funktionalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Aktiver UPnP-funktionalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Aktiver yderligere logning"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Aktiver sikker tilstand"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Ekstern port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Eksterne porte"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Generelle indstillinger"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Giv adgang til upnp-procedurer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Vært"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Interne adresser"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Interne porte"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL'er"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP-indstillinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Underretningsinterval"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL til præsentation"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Sætter ekstra fejlfindingsoplysninger i systemloggen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Rapportere system i stedet for dæmonens oppetid"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN vært"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Start UPnP- og NAT-PMP-tjenesten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Der er ingen aktive omdirigeringer."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP gør det muligt for klienter i det lokale netværk at konfigurere "
"routeren automatisk."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP-lease-fil"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universelt plug &play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Ukendt"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Brug STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Værdi i KByte/s, kun til information"

View File

@ -0,0 +1,233 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-26 17:57+0200\n"
"PO-Revision-Date: 2022-02-24 06:56+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/de/>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.11-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACLs definieren, welche externen Ports zu welchen internen Adressen und "
"Ports weitergeleitet werden dürfen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Aktion"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktive UPnP-Weiterleitungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Erweiterte Einstellungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Als IGDv1-Gerät anstelle von IGDv2 bekanntgeben"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Nur Weiterleitungen zurück zum anfordernden Client zulassen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Angekündigte Modellnummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Angekündigte Seriennummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Aufräumintervall für Weiterleitungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Aufräumschwellenwert für Weiterleitungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Clientadresse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Clientport"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Löschen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Beschreibung"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Geräte-UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Download-Bandbreite"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "IGDv1 Modus aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP Funktionalität aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "UPnP Funktionalität aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Erweiterte Protokollierung aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Sicheren Modus aktivieren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Externer Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Externe Ports"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Allgemeine Einstellungen"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Zugriff auf UPNP-Prozeduren gewähren"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Interne Adressen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Interne Ports"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs der MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP-Einstellungen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Benachrichtigungsintervall"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Präsentations-URL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokoll"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Schreibt zusätzliche Debug-Informationen in das Systemprotokoll"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Systemlaufzeit statt Prozesslaufzeit melden"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN-Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN-Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "UPnP und NAT-PMP Dienst starten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Es gibt keine aktiven Weiterleitungen."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP erlaubt es Clients im lokalen Netzwerk automatisch Port-Weiterleitungen "
"auf diesem Router einzurichten."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP Lease-Datei"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Unbekannt"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "STUN verwenden"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Wert in Kilobyte/s, nur informativ"

View File

@ -0,0 +1,229 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-28 02:08+0200\n"
"PO-Revision-Date: 2022-10-03 08:34+0000\n"
"Last-Translator: TakissX <pxatzidakis@gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/el/>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.1\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Δράση"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Ρυθμίσεις για προχωρημένους"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Σχόλιο"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Περιγραφή"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Γενικές ρυθμίσεις"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Θύρα"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Πρωτόκολλο"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,229 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2021-06-24 10:23+0000\n"
"Last-Translator: Hannu Nyman <hannu.nyman@iki.fi>\n"
"Language-Team: English <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/en/>\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.7.1-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Advanced Settings"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Enable secure mode"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,233 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:41+0200\n"
"PO-Revision-Date: 2020-11-15 19:47+0000\n"
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/es/>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.4-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Los ACL especifican qué puertos externos pueden ser redirigidos hacia qué "
"direcciones y puertos internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Acción"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirecciones UPnP activas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Configuración avanzada"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Anunciarse como dispositivo IGDv1 en lugar de IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Permitir añadir redirecciones sólo a IPs que lo soliciten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Número de modelo declarado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Número de serie declarado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Intervalo de borrado de reglas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Umbral de borrado de reglas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Dirección del cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Puerto del cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Comentario"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Eliminar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descripción"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID del dispositivo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Enlace descendente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Activar modo IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Activar la funcionalidad NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Activar la funcionalidad UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Activar registro adicional"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Activar modo seguro"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Puerto externo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Puertos externos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Configuración general"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Conceder acceso a los procedimientos de upnp"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Direcciones internas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Puertos internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Configuración MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervalo de notificación"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Puerto"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL de presentación"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protocolo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Escribe información de depuración extra en el registro del sistema"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Informar del tiempo activo del sistema en vez de el del demonio"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Puerto STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Iniciar servicio UPnP y NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Sin redirecciones activas."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permite a los clientes en la red local configurar automáticamente el "
"enrutador."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Tiempo de conexión UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play universal"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Desconocido"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Enlace ascendente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Utilice STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valor en KBytes/s (sólo informativo)"

View File

@ -0,0 +1,229 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2022-04-21 23:00+0000\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/fi/>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.12-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Toiminta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktiivise UPnP-uudelleenohjaukset"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Lisäasetukset"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Poista"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Kuvaus"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Laitteen UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Käytä IGDv1-tilaa"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Käytä NAT-PMP-toiminnallisuutta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Käytä UPnP-toiminnallisuutta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Ulkoinen portti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Ulkoiset portit"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Yleiset asetukset"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Palvelin"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Sisäiset osoitteet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Sisäiset portit"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP-asetukset"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Ilmoitusväli"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Portti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokolla"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Käynnistä UPnP- ja NAT-PMP-palvelu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Ei aktiivisia uudelleenohjauksia."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP-lainatiedosto"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Tuntematon"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Lähetysyhteys"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Käytä STUN:ia"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,236 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2022-02-04 18:56+0000\n"
"Last-Translator: ButterflyOfFire <ButterflyOfFire@protonmail.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.11-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Les ACLs définissent quels ports externes peuvent être redirigés, vers "
"quelles adresses et ports internes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Action"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirections UPnP actives"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Paramètres avancés"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Annoncer comme dispositif IGDv1 au lieu de IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
"Permet d'ajouter des redirections seulement vers les adresses IP qui font "
"des demandes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Numéro de modèle annoncé"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Numéro de série annoncé"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Intervalle des règles de nettoyage"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Niveau des règles de nettoyage"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Adresse du client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port du client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Commentaire"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Effacer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Description"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID du périphérique"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Liaison descendante"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Activer le mode IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Activer la fonctionnalité NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Activer la fonctionnalité UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Activer la journalisation additionnelle"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Activer le mode sécurisé"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Port externe"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Ports externes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Paramètres généraux"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Accorder l'accès aux procédures de upnp"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Hôte"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Adresses internes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Ports internes"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Paramètres MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervalle de notification"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL de présentation"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protocole"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Rajoute des informations de debug dans le journal-système"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
"Indiquer la durée de fonctionnement du système plutôt que celle du démon UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Hôte STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Port STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Démarrer les services UPnP et NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Il n'y a pas de redirections actives."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permet à des clients du réseau local de configurer automatiquement le "
"routeur."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Fichier des baux UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play universel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Inconnue"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Liaison montante"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Utiliser STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valeur en Ko/s, pour information seulement"

View File

@ -0,0 +1,227 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2021-01-15 22:31+0000\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/he/>\n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 4.5-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "הגדרות מתקדמות"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "תיאור"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "פתחה"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,227 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: hi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 1.1.1\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,233 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2021-08-12 12:55+0000\n"
"Last-Translator: Tudós Péter <tudi.sk@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/hu/>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.8-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Az ACL-ek határozzák meg, hogy melyik külső portok melyik belső portokra és "
"címekre kerülhetnek továbbításra"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Művelet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktív UPnP átirányítások"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Haladó Beállítások"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Hirdetés IGDv1 eszközként IGDv2 helyett"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
"Kizárólag a kérést küldő IP címre történő továbbítás hozzáadásának "
"engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Bejelentett modellszám"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Bejelentett sorozatszám"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Szabály törlési időköz"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Szabály törlési küszöbérték"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Ügyfél cím"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Ügyfél port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Megjegyzés"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Törlés"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Leírás"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Eszköz UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Befelé jövő kapcsolat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "IGDv1 mód engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP funkció engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "UPnP funkció engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "További naplózás engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Biztonságos mód engedélyezése"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Külső port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Külső portok"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Általános Beállítások"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Gép"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Belső címek"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Belső portok"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL-ek"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP beállítások"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Értesítési időköz"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Bemutató URL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "További hibakeresési információkat tesz a rendszernaplóba"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "A démon helyett a rendszer működési idejét jeleníti meg"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "UPnP és NAT-PMP szolgáltatás elindítása"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Nincsenek aktív átírányítások."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"Az UPnP lehetővé teszi a hálózatban lévő ügyfelek számára hogy automatikusan "
"beállítsák a routert."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP bérlet fájl"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Univerzális Plug and Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Ismeretlen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Kifelé menő kapcsolat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Érték KByte/s-ban, csak tájékoztató jellegű"

View File

@ -0,0 +1,233 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2022-02-18 20:58+0000\n"
"Last-Translator: pisquan8 <cimurro@outlook.de>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/it/>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.11-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Le ACL specificano quali porte esterne possono essere redirezionate a quali "
"indirizzi e porte interni"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Azione"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Attiva reindirizzamento UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Impostazioni Avanzate"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Pubblicizza come dispositivo IGDv1 anziché IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Permetti l'aggiunta della mappatura solo agli indirizzi IP richiedenti"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Numero modello annunciato"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Numero seriale annunciato"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Cancella le regole"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Pulisci le regole degli eventi"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Indirizzo IP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Porta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Commento"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Elimina"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descrizione"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID del dispositivo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Abilita modalità IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Abilita il protocollo NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Abilita il protocollo UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Abilita log addizionale"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Abilita la modalità sicura"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Porta Esterna"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Porte Esterne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Impostazioni Generali"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Concedere l'accesso alle procedure upnp"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Indirizzi Interni"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Porte Interne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACL MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Opzioni di MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervallo di notifica"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Porta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL di presentazione"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protocollo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Scrivi nel log di sistema le informazioni di extra debugging"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Mostra l'uptime del sistema invece del demone"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Porta STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Avvia il servizo UPnP e NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Non ci sono mappature attive."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permette ai dispositivi nella rete locale di configurare "
"automaticamente il router."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "File di leasing UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play universale"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Sconosciuto"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Usare STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valori in KByte/s, (informativo)"

View File

@ -0,0 +1,233 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2021-02-07 07:33+0000\n"
"Last-Translator: Satoru Yoshida <ramat@ram.ne.jp>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ja/>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.5-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"アクセス制御リストACLは、どの外部ポートからどの内部アドレス及びポートへリ"
"ダイレクトするかを設定します。"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "アクション"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "稼働中のUPnPリダイレクト"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "詳細設定"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "IGDv2 ではなく IGDv1 デバイスとしてアドバタイズ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "要求元IPアドレスへの転送のみ、追加を許可します。"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "通知するモデル番号"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "通知するシリアル番号"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "ルール消去間隔"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "ルール消去しきい値"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "クライアント・アドレス"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "クライアント・ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "コメント"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "削除"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "説明"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "デバイス UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "ダウンリンク"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "IGDv1 モードを有効化"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP機能を有効にする"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "UPnP機能を有効にする"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "ログ機能を有効にする"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "セキュアモードを有効にする"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "外部ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "外部ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "一般設定"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "upnp プロシージャへのアクセスを許可"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "ホスト"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "内部アドレス"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "内部ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnPアクセス制御リストACL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP 設定"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "通知間隔"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "プレゼンテーションURL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "プロトコル"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "追加のデバッグ情報をシステムログへ挿入する"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "サービスの起動時間の代わりにシステムの起動時間を使用する"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN ホスト"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN ポート"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "UPnP及びNAT-PMPサービスを開始する"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "有効なリダイレクトはありません。"
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnPを使用することで、ローカルネットワーク内のクライアントが自動的にルータを"
"構成することができます。"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP リースファイル"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "ユニバーサル プラグ & プレイ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "不明"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "アップリンク"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "STUN を使用"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "クライアントへの情報提供のみに使用される、KByte/sの値です。"

View File

@ -0,0 +1,229 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2022-12-27 13:49+0000\n"
"Last-Translator: somni <me@somni.one>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ko/>\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.15.1-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "액션"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "고급 설정"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "메모"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "삭제"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "설명"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "기본 설정"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "포트"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "프로토콜"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,229 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2020-02-07 09:18+0000\n"
"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
"Language-Team: Marathi <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/mr/>\n"
"Language: mr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.11-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "प्रगत सेटिंग्ज"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "टिप्पणी"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "हटवा"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "वर्णन"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "सामान्य सेटिंग्ज"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "पोर्ट"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "प्रोटोकॉल"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "अज्ञात"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "अपलिंक"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,227 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2021-03-31 12:26+0000\n"
"Last-Translator: Faruki Ramly <farukiramly45@gmail.com>\n"
"Language-Team: Malay <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ms/>\n"
"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.6-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Tindakan"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Tetapan Lanjutan"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Keterangan"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,229 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2021-02-27 05:11+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/nb_NO/>\n"
"Language: nb_NO\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.5\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL angir hvilke eksterne porter som kan bli viderekoblet, og til hvilke "
"interne adresser og porter."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Handling"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktive UPnP Viderekoblinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Avanserte innstillinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Tillat videkobling kun til IP adresser som ber om det"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Annonsert modellnummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Annonsert serienummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Nullstill UPnP Viderekoblinger intervall"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Nullstill UPnP terskel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Klient adresse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Klient port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Slett"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Beskrivelse"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Enhet UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Nedlinje"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Aktiver NAT-PMP funksjonalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Aktiver UPnP funksjonalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Aktiver tilleggs logging"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Aktiver sikker modus"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Ekstern port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Eksterne porter"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Generelle innstillinger"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Interne adresser"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Interne porter"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL'er"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP Innstillinger"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Informasjons intervall"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Presentasjon URL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokoll"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Setter ekstra debugging informasjon i systemloggen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Rapporter systemets oppetid istedenfor daemon oppetid"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Start UPnP og NAT-PMP tjenesten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Det finnes ingen aktive viderekoblinger"
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP gjør at klientene i det lokale nettverket automatisk kan konfigurere "
"ruteren."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP leie fil"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Opplinje"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Verdi i KByte/sek, kun for informasjon"

View File

@ -0,0 +1,232 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2022-06-10 13:18+0000\n"
"Last-Translator: Matthaiks <kitynska@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/pl/>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.13-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Listy kontroli dostępu (ang. ACL) określają jakie porty mogą być "
"przekierowane do jakich wewnętrznych adresów i portów"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Akcja"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktywne przekierowania UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Ustawienia zaawansowane"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Rozgłaszanie jako urządzenie IGDv1 zamiast jako IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Zezwól na dodawanie przekazywań tylko do odpytujących adresów IP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Rozgłaszany numer modelu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Rozgłaszany numer seryjny"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Interwał czyszczenia reguł"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Próg czyszczenia reguł"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Adres klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Komentarz"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Usuń"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Opis"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID urządzenia"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Pobieranie"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Włącz tryb IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Włącz funkcjonalność NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Włącz funkcjonalność UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Włącz rozszerzone raportowanie"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Włącz tryb bezpieczny"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Port zewnętrzny"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Porty zewnętrzne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Ustawienia główne"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Udziel dostępu do procedur UPNP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Adresy wewnętrzne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Porty wewnętrzne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "Listy kontroli dostępu MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Ustawienia MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interwał powiadamiania"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL prezentacji"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokół"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
"Umieszcza dodatkowe informacje dotyczące debugowania w dzienniku systemowym"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Zgłaszaj czas pracy systemu zamiast czas pracy usługi"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Port STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Uruchom usługi UPnP i NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Nie ma aktywnych przekierowań."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP umożliwia klientom w sieci lokalnej automatyczne konfigurowanie routera."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Plik dzierżawy UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Nieznany"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Wysyłanie"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Użyj STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Wartość w KB/s, tylko informacyjna"

View File

@ -0,0 +1,234 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-26 19:03+0200\n"
"PO-Revision-Date: 2021-03-13 09:19+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/pt/>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.5.2-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Os ACL especificam quais as portas externas que podem ser redirecionadas "
"para que endereços internos e portas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Ação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirecionamentos ativos da UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Definições Avançadas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Anuncie como aparelho IGDv1 em vez de IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
"Permitir a adição de encaminhamentos apenas para solicitar endereços IP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Número modelo anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Número de série anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Limpar intervalo de regras"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Limpar limiar de regras"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Endereço do Cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Porta do Cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Comentário"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Apagar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descrição"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID do aparelho"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Ativar o modo IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Ativar a funcionalidade NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Ativar a funcionalidade UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Ativar log adicional"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Ativar o modo seguro"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Porta Externa"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Portas externas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Configurações gerais"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Conceder acesso UCI aos procedimentos upnp"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Endereços internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Portas internas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Definições MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervalo de Notificação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Porta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL de apresentação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protocolo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Põe informações de depuração extras no log do sistema"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Relata uptime do sistema ao invés da do daemon"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Porta STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Iniciar serviço UPnP e NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Não há redirecionamentos ativos."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permite que os clientes da rede local configurem o router "
"automaticamente."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Ficheiro de concessão UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play Universal"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Desconhecido"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Ligação ascendente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Utilizar STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valor em KByte/s, apenas informativo"

View File

@ -0,0 +1,233 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:41+0200\n"
"PO-Revision-Date: 2023-03-08 10:38+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"openwrt/luciapplicationsupnp/pt_BR/>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.16.2-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACLs especificam quais portas externas podem ser redirecionadas para quais "
"endereços e portas internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Ação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirecionamentos UPnP Ativos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Configurações avançadas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Anuncie-se como um dispositivo IGDv1 ao invés de um IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
"Permite adicionar encaminhamento apenas para o endereço IP requisitante"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Número do modelo anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Número de série anunciado"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Intervalo de limpeza das regras"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Limiar de limpeza das regras"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Endereço do cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Porta do Cliente"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Comentário"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Apagar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descrição"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID do Dispositivo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Velocidade de recebimento do enlace (downlink)"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Habilitar o modo IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Habilite a função NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Habilite a função UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Habilite registros adicionais"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Habilite modo seguro"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Porta externa"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Portas Externas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Configurações gerais"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Conceda acesso UCI aos procedimentos upnp"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Host"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Endereços internos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Portas internas"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACLs do MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Configurações do MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervalo de notificação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Porta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL de Apresentação"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protocolo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Envie informações extra de depuração ao registro do sistema"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Informe o tempo de vida do sistema ao invés do tempo do processo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Host STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Porta STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Dispare os serviços de UPnP e NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Não existe redirecionamentos ativos."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP permite os clientes da rede local configurem automaticamente o roteador."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Arquivo de concessão do UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play Universal"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Desconhecido"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Velocidade de envio do enlace (uplink)"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Use o STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valores em KByte/s, apenas informativas"

View File

@ -0,0 +1,231 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2022-01-25 22:56+0000\n"
"Last-Translator: CRISTIAN ANDREI <cristianvdr@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ro/>\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
"X-Generator: Weblate 4.11-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL-urile specifica porturile externe care pot fi redirectate si spre ce "
"adrese si porturi interne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Acțiune"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Redirecturi active UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Setări avansate"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Publicitate ca dispozitiv IGDv1 în loc de IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Permite adaugarea forward-urilor doar catre adresele ip solicitante"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Numărul modelului anunțat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Număr de serie anunțat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Intervalul de curatare reguli"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Limita de curatare reguli"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Adresa client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port client"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Comentariu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Ștergeți"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Descriere"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID al dispozitivului"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Link în jos"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Activează modul IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Activeaza functionalitatea NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Activeaza functionalitatea UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Activeaza log-area aditionala"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Activeaza modul securizat"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Port extern"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Porturi externe"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Setări generale"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Acordarea accesului la procedurile upnp"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Gazdă"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Adrese interne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Porturi interne"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "Liste de acces mini UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Setari mini UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interval de notificare"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Adresa de prezentare"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protocol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Pune informatii utile suplimentare in log-ul de sistem"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Raporteaza timpul de functionare de sistem in loc de serviciu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Gazda STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Portul STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Porniți UPnP și serviciul NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Nu exista redirecturi active."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPNP permite clientulor din reteaua locala sa configureze automat routerul."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Fisierul de conexiuni UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Plug & Play universal"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Necunoscut"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Legătură ascendentă"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Utilizați STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Valorea in KOcteti/s , doar informational"

View File

@ -0,0 +1,235 @@
msgid ""
msgstr ""
"Project-Id-Version: LuCI: upnp\n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
"PO-Revision-Date: 2021-10-26 14:59+0000\n"
"Last-Translator: Darin Avdeyeva <yulyablack@inbox.lv>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.9-dev\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Список доступа задает внешние порты для перенаправления на внутренние адреса "
"и порты"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Действие"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Активные UPnP-переадресации"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Дополнительные настройки"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Объявить как IGDv1 устройство вместо IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Разрешить перенаправление только для запрашивающих IP-адресов"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Объявить номер модели"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Объявить серийный номер"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Интервал очистки правил"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Порог очистки правил"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Адрес клиента"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Порт клиента"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Комментарий"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Удалить"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Описание"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID устройства"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Внутреннее соединение"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "IGDv1 режим"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Включить NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Включить UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Дополнительное журналирование"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Защищённый режим"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Внешний порт"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Внешние порты"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Общие настройки"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Предоставить доступ к процедурам UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Устройство"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Внутренние адреса"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Внутренние порты"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "Список доступа MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Настройки MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Интервал уведомления"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Порт"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Задать URL-адрес"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Протокол"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Добавлять дополнительную отладочную информацию в системный журнал"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Сообщать время работы системы вместо службы"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Хост STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Порт STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Запустить службы<br />UPnP и NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Активные переадресации отсутствуют."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP позволяет клиентам в локальной сети автоматически настраивать "
"маршрутизатор."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Файл аренды UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Неизвестно"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Внешнее соединение"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Используйте STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Значение в КБ/с, только для информации"

View File

@ -0,0 +1,227 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2020-04-04 17:34+0000\n"
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/sk/>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 4.0-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Akcia"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktívne presmerovania UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Pokročilé nastavenia"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Umožniť pridanie preposielaní iba požadovaným adresám IP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Ohlásené číslo modelu"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Ohlásené sériové číslo"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Vymazať interval pravidiel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Vymazať prah pravidiel"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Adresa klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Port klienta"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Komentár"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Odstrániť"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Popis"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID zariadenia"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Povoliť režim IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Povoliť funkcionalitu NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Povoliť funkcionalitu UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Povoliť dodatočné zaznamenávanie"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Povoliť zabezpečený režim"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Externý port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Externé porty"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Všeobecné nastavenia"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Hostiteľ"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Interné adresy"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Interné porty"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Nastavenia MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Interval upozornení"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Prezentačná URL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Spustiť službu UPnP a NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Neexistujú žiadne aktívne presmerovania."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr "UPnP umožňuje klientom v miestnej sieti automaticky nastaviť smerovač."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Neznáme"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Hodnota v KBajtoch za sekundu, iba informatívne"

View File

@ -0,0 +1,231 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2022-12-06 01:48+0000\n"
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/sv/>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.15-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL:er anger vilka externa portar som ska omdirigeras till vilka interna "
"adresser och portar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Åtgärd"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktivera UPnP-omdirigeringar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Avancerade inställningar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Aviserat modellnummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Aviserat serienummer"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Klient-adress"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Klient-port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Kommentera"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Ta bort"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Beskrivning"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Enhetens UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Nerlänk"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Aktivera NAT-PMP-funktionalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Aktivera UPnP-funktionalitet"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Aktivera ytterligare loggning"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Aktivera säkert läge"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Extern port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Externa portar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Generella inställningar"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Värd"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Interna adresser"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Interna portar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "ACL:er för MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Inställningar för MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Intervall för avisering"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Port"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Presentationens URL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokoll"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Lägger extra felsökningsinformation till system-loggen"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Rapportera systemet iställer för demonens upptid"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Starta UPnP och NAT-PMP-tjänsten"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Det finns inga aktiva omdirigeringar."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP tillåter klienter i det lokala nätverket att automatiskt ställa in "
"routern."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Hyr-fil för UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universiell Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Okänd"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Upplänk"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Värde i KByte/s, endast informell"

View File

@ -0,0 +1,216 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,231 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2021-05-14 02:32+0000\n"
"Last-Translator: semih <semiht@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/tr/>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.7-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACL'ler, hangi harici bağlantı noktalarının hangi dahili adreslere ve "
"bağlantı noktalarına yeniden yönlendirilebileceğini belirtir"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Eylem"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Aktif UPnP Yönlendirmeleri"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Gelişmiş Ayarlar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "IGDv2 yerine IGDv1 cihazı olarak duyuru yap"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "Yalnızca istekte bulunan ip adreslerine yönlendirme eklemeye izin ver"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Açıklanan model numarası"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Açıklanan seri numarası"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Temiz kurallar aralığı"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Temiz kural eşiği"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "İstemci Adresi"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "İstemci Bağlantı Noktası"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Açıklama"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Sil"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Açıklama"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "Cihaz UUID'si"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "IGDv1 modunu etkinleştir"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "NAT-PMP işlevselliğini etkinleştirin"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "UPnP işlevselliğini etkinleştirin"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Ek günlük kaydını etkinleştir"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Güvenli modu etkinleştir"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Harici Bağlantı Noktası"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Harici bağlantı noktaları"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Genel Ayarlar"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Upnp prosedürlerine erişim izni verin"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Ana bilgisayar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Dahili adresler"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Dahili bağlantı noktaları"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL'leri"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP ayarları"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Bildirme aralığı"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Bağlantı noktası"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "Sunum URL'si"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Protokol"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Sistem günlüğüne fazladan hata ayıklama bilgisi koyar"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Arka plan programı çalışma süresi yerine sistemi rapor et"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN Ana Bilgisayarı"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN Bağlantı Noktası"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "UPnP ve NAT-PMP hizmetini başlatın"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Etkin yönlendirme yok."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP, yerel ağdaki istemcilerin yönlendiriciyi otomatik olarak "
"yapılandırmasına izin verir."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP kira dosyası"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Evrensel Tak ve Çalıştır"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Bilinmiyor"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "STUN kullan"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "KBayt/sn cinsinden değer, yalnızca bilgi amaçlı"

View File

@ -0,0 +1,233 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"PO-Revision-Date: 2022-12-22 22:51+0000\n"
"Last-Translator: Bohdan <chbgdn@gmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/uk/>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.15.1-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Списки контролю доступу (ACL) визначають, які зовнішні порти можуть бути "
"переспрямовані на які внутрішні адреси й порти"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Дія"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "Активні переспрямування UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Додаткові налаштування"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "Оголошувати як пристрій IGDv1 замість IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
"Дозволити додавання переспрямування тільки для IP-адрес, що надсилають запити"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "Оголошуваний номер моделі"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "Оголошуваний серійний номер"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "Інтервал очищення правил"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "Поріг очищення правил"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "Адреса клієнта"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "Порт клієнта"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Примітка"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "Видалити"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Опис"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "UUID пристрою"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Низхідне з'єднання"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "Увімкнути режим IGDv1"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "Увімкнути функцію NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "Увімкнути функцію UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "Увімкнути додаткове журналювання"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Увімкнути захищений режим"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "Зовнішній порт"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "Зовнішні порти"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "Загальні налаштування"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "Надати доступ до процедур upnp"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "Вузол"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "Внутрішні адреси"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "Внутрішні порти"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "Список контролю доступу MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "Настройки MiniUPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "Інтервал сповіщення"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "Порт"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "URL презентації"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Протокол"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "Включати додаткові відомості для налагодження до системного журналу"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "Повідомляти час безвідмовної роботи системи, а не сервісу"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "Хост STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "Порт STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "Запускати служби UPnP та NAT-PMP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "Немає активних переспрямувань."
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP надає клієнтам у локальній мережі змогу автоматично настроювати "
"маршрутизатор."
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "Файл оренд UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "Невідомо"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Висхідне з'єднання"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "Використовувати STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "Значення (КБ/с), тільки для інформації"

View File

@ -0,0 +1,233 @@
# upnp.pot
# generated from ./applications/luci-upnp/luasrc/i18n/upnp.en.lua
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-16 06:59+0200\n"
"PO-Revision-Date: 2023-02-20 15:36+0000\n"
"Last-Translator: Nguyễn văn tuyên <admin@tuyen.vn>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsupnp/vi/>\n"
"Language: vi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.16-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"ACLs chỉ định cổng bên ngoài nào có thể được chuyển hướng đến địa chỉ và "
"cổng nội bộ nào"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "Hành động"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "Cài đặt nâng cao"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "Bình luận"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "Mô tả"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "Downlink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "Kích hoạt chế độ an toàn"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr ""
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "Giao thức"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr ""
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "Uplink"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr ""
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr ""

View File

@ -0,0 +1,232 @@
#
# Yangfl <mmyangfl@gmail.com>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:40+0200\n"
"PO-Revision-Date: 2023-03-11 03:53+0000\n"
"Last-Translator: Eric <hamburger2048@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"openwrt/luciapplicationsupnp/zh_Hans/>\n"
"Language: zh_Hans\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.16.2-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr "访问控制列表指定哪些外部端口可以被重定向至哪些内部地址及端口"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "操作"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "活动的 UPnP 重定向"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "高级设置"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "广播为 IGDv1 设备,而不是 IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "仅允许请求的 IP 地址添加自己的转发"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "通告的设备型号"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "通告的设备序列号"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "定时清除规则"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "清除规则阈值"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "客户端地址"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "客户端端口"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "备注"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "删除"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "描述"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "设备 UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "下行速率"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "启用 IGDv1 模式"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "启用 NAT-PMP 功能"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "启用 UPnP 功能"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "启用额外的日志"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "启用安全模式"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "外部端口"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "外部端口"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "常规设置"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "授予访问 UPnP 程序的权限"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "主机"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "内部地址"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "内部端口"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP 访问控制列表"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP 设置"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "通知的时间间隔"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "端口"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "服务网址"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "协议"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "将额外的调试信息打印至系统日志中"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "用系统运行时间代替进程运行时间"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN 主机"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN 端口"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "启动 UPnP 与 NAT-PMP 服务"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "没有活动的重定向。"
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr "UPnP 允许局域网内客户端自动设置路由器上的端口转发。"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP 租约文件"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "通用即插即用UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "未知"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "上行速率"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "使用 STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "单位为 KByte/s仅供参考"

View File

@ -0,0 +1,233 @@
#
# Yangfl <mmyangfl@gmail.com>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2022-02-05 09:21+0000\n"
"Last-Translator: Hulen <shift0106@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"openwrt/luciapplicationsupnp/zh_Hant/>\n"
"Language: zh_Hant\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.11-dev\n"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:182
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"您可以使用 ACL存取控制串列來規定哪些「外部埠」可被重新導向到哪些「內部位"
"址」和「內部埠」"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:202
msgid "Action"
msgstr "動作"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:31
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:113
msgid "Active UPnP Redirects"
msgstr "動態 UPnP 重新導向"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:119
msgid "Advanced Settings"
msgstr "進階設定"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:131
msgid "Advertise as IGDv1 device instead of IGDv2"
msgstr "宣傳為 IGDv1 裝置,而非 IGDv2"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:128
msgid "Allow adding forwards only to requesting ip addresses"
msgstr "只容許向請求的IP位址新增轉發"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:150
msgid "Announced model number"
msgstr "發布的型號"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:149
msgid "Announced serial number"
msgstr "發布的序列號"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:160
msgid "Clean rules interval"
msgstr "清除規則間隔"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:156
msgid "Clean rules threshold"
msgstr "清除規則門檻值"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:45
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:85
msgid "Client Address"
msgstr "客戶端位址"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:47
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:87
msgid "Client Port"
msgstr "客戶端埠"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:188
msgid "Comment"
msgstr "註解"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:62
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:106
msgid "Delete"
msgstr "刪除"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:48
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:88
msgid "Description"
msgstr "描述"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:148
msgid "Device UUID"
msgstr "裝置 UUID"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:136
msgid "Downlink"
msgstr "下行鏈路"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:130
msgid "Enable IGDv1 mode"
msgstr "啟用 IGDv1 模式"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:125
msgid "Enable NAT-PMP functionality"
msgstr "啓用 NAT-PMP 功能"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:124
msgid "Enable UPnP functionality"
msgstr "啓用 UPnP 功能"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:133
msgid "Enable additional logging"
msgstr "啓用附加日誌"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:127
msgid "Enable secure mode"
msgstr "啓用安全模式"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:44
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:84
msgid "External Port"
msgstr "外部埠"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:190
msgid "External ports"
msgstr "外部埠範圍"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:118
msgid "General Settings"
msgstr "一般設定"
#: applications/luci-app-upnp/root/usr/share/rpcd/acl.d/luci-app-upnp.json:3
msgid "Grant access to upnp procedures"
msgstr "授予存取 UPnP 程序的權限"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:46
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:86
msgid "Host"
msgstr "主機"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:194
msgid "Internal addresses"
msgstr "內部位址範圍"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:198
msgid "Internal ports"
msgstr "內部埠範圍"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:181
msgid "MiniUPnP ACLs"
msgstr "MiniUPnP ACL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:116
msgid "MiniUPnP settings"
msgstr "MiniUPnP 設定"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:152
msgid "Notify interval"
msgstr "通知時間間隔"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:142
msgid "Port"
msgstr "連接埠"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:164
msgid "Presentation URL"
msgstr "存在 URL"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:43
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:83
msgid "Protocol"
msgstr "協定"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:134
msgid "Puts extra debugging information into the system log"
msgstr "將額外的除錯資訊寫入系統日誌"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:146
msgid "Report system instead of daemon uptime"
msgstr "報告使用系統上線時間,而非程序上線時間"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:172
msgid "STUN Host"
msgstr "STUN 主機"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:176
msgid "STUN Port"
msgstr "STUN 埠"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:121
msgid "Start UPnP and NAT-PMP service"
msgstr "啟動服務"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:70
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:66
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:110
msgid "There are no active redirects."
msgstr "沒有活躍的重新導向。"
#: applications/luci-app-upnp/root/usr/share/luci/menu.d/luci-app-upnp.json:3
msgid "UPnP"
msgstr "UPnP"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:76
msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
"UPnP通用隨插即用允許本地網絡中的客戶端配置路由器自動設定埠的重新導向。"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:167
msgid "UPnP lease file"
msgstr "UPnP 租約檔"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:75
msgid "Universal Plug & Play"
msgstr "通用隨插即用 (UPnP)"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/status/include/80_upnp.js:60
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:56
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:100
msgid "Unknown"
msgstr "未知"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:139
msgid "Uplink"
msgstr "上行鏈路"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:170
msgid "Use STUN"
msgstr "使用 STUN"
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:137
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:140
msgid "Value in KByte/s, informational only"
msgstr "值 (KByte/s) 僅供參考"

View File

@ -0,0 +1,10 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@upnpd[-1]
add ucitrack upnpd
set ucitrack.@upnpd[-1].init=miniupnpd
commit ucitrack
EOF
exit 0

View File

@ -0,0 +1,155 @@
#!/usr/bin/env lua
local json = require "luci.jsonc"
local UCI = require "luci.model.uci"
local fs = require "nixio.fs"
local sys = require "luci.sys"
local methods = {
get_status = {
call = function()
local uci = UCI.cursor()
local lease_file = uci:get("upnpd", "config", "upnp_lease_file")
local ipv4_hints = sys.net.ipv4_hints()
local rule = { }
local ipt = io.popen("iptables --line-numbers -t nat -xnvL MINIUPNPD 2>/dev/null")
if ipt then
local upnpf = lease_file and io.open(lease_file, "r")
while true do
local ln = ipt:read("*l")
if not ln then
break
elseif ln:match("^%d+") then
local num, proto, extport, intaddr, intport =
ln:match("^(%d+).-([a-z]+).-dpt:(%d+) to:(%S-):(%d+)")
local descr = ""
if num and proto and extport and intaddr and intport then
extport = tonumber(extport)
intport = tonumber(intport)
if upnpf then
local uln = upnpf:read("*l")
if uln then descr = uln:match(string.format("^%s:%d:%s:%d:%%d*:(.*)$", proto:upper(), extport, intaddr, intport)) end
if not descr then descr = "" end
end
local host_hint, _, e
for _,e in pairs(ipv4_hints) do
if e[1] == intaddr then
host_hint = e[2]
break
end
end
rule[#rule+1] = {
num = num,
proto = proto:upper(),
extport = extport,
intaddr = intaddr,
host_hint = host_hint,
intport = intport,
descr = descr
}
end
end
end
if upnpf then upnpf:close() end
ipt:close()
end
return { rules = rule }
end
},
delete_rule = {
args = { token = "token" },
call = function(args)
local util = require "luci.util"
local idx = args and tonumber(args.token)
local res = {}
if idx and idx > 0 then
local uci = UCI.cursor()
sys.call("iptables -t filter -D MINIUPNPD %d 2>/dev/null" % idx)
sys.call("iptables -t nat -D MINIUPNPD %d 2>/dev/null" % idx)
local lease_file = uci:get("upnpd", "config", "upnp_lease_file")
if lease_file and fs.access(lease_file) then
sys.call("sed -i -e '%dd' %s" %{ idx, util.shellquote(lease_file) })
end
uci.unload()
return { result = "OK" }
end
return { result = "Bad request" }
end
}
}
local function parseInput()
local parse = json.new()
local done, err
while true do
local chunk = io.read(4096)
if not chunk then
break
elseif not done and not err then
done, err = parse:parse(chunk)
end
end
if not done then
print(json.stringify({ error = err or "Incomplete input" }))
os.exit(1)
end
return parse:get()
end
local function validateArgs(func, uargs)
local method = methods[func]
if not method then
print(json.stringify({ error = "Method not found" }))
os.exit(1)
end
if type(uargs) ~= "table" then
print(json.stringify({ error = "Invalid arguments" }))
os.exit(1)
end
uargs.ubus_rpc_session = nil
local k, v
local margs = method.args or {}
for k, v in pairs(uargs) do
if margs[k] == nil or
(v ~= nil and type(v) ~= type(margs[k]))
then
print(json.stringify({ error = "Invalid arguments" }))
os.exit(1)
end
end
return method
end
if arg[1] == "list" then
local _, method, rv = nil, nil, {}
for _, method in pairs(methods) do rv[_] = method.args or {} end
print((json.stringify(rv):gsub(":%[%]", ":{}")))
elseif arg[1] == "call" then
local args = parseInput()
local method = validateArgs(arg[2], args)
local result, code = method.call(args)
print((json.stringify(result):gsub("^%[%]$", "{}")))
os.exit(code or 0)
end

View File

@ -0,0 +1,13 @@
{
"admin/services/upnp": {
"title": "UPnP",
"action": {
"type": "view",
"path": "upnp/upnp"
},
"depends": {
"acl": [ "luci-app-ddns" ],
"uci": { "upnpd": true }
}
}
}

View File

@ -0,0 +1,18 @@
{
"luci-app-ddns": {
"description": "Grant access to upnp procedures",
"read": {
"ubus": {
"luci.upnp": [ "get_status" ],
"luci": [ "setInitAction" ]
},
"uci": [ "upnpd" ]
},
"write": {
"ubus": {
"luci.upnp": [ "delete_rule" ]
},
"uci": [ "upnpd" ]
}
}
}

View File

@ -0,0 +1,80 @@
#
# Copyright (C) 2006-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=miniupnpd
PKG_VERSION:=2.0.20170421
PKG_RELEASE:=4
PKG_SOURCE_URL:=http://miniupnp.free.fr/files
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_HASH:=9677aeccadf73b4bf8bb9d832c32b5da8266b4d58eed888f3fd43d7656405643
PKG_MAINTAINER:=Markus Stenberg <fingon@iki.fi>
PKG_LICENSE:=BSD-3-Clause
include $(INCLUDE_DIR)/package.mk
define Package/miniupnpd
SECTION:=net
CATEGORY:=Network
DEPENDS:=+iptables +libip4tc +libuuid
TITLE:=Lightweight UPnP IGD, NAT-PMP & PCP daemon
SUBMENU:=Firewall
URL:=http://miniupnp.free.fr/
endef
define Package/miniupnpd/config
config MINIUPNPD_IGDv2
bool
default n
prompt "Enable IGDv2"
endef
define Package/miniupnpd/conffiles
/etc/config/upnpd
endef
define Package/miniupnpd/postinst
#!/bin/sh
if [ -z "$$IPKG_INSTROOT" ]; then
( . /etc/uci-defaults/99-miniupnpd )
rm -f /etc/uci-defaults/99-miniupnpd
fi
exit 0
endef
define Build/Prepare
$(call Build/Prepare/Default)
echo "OpenWrt" | tr \(\)\ _ >$(PKG_BUILD_DIR)/os.openwrt
endef
MAKE_FLAGS += \
TARGET_OPENWRT=1 TEST=0 \
LIBS="" \
CC="$(TARGET_CC) -DIPTABLES_143 \
-lip4tc -luuid" \
CONFIG_OPTIONS="--portinuse --leasefile \
$(if $(CONFIG_MINIUPNPD_IGDv2),--igd2)" \
-f Makefile.linux \
miniupnpd
define Package/miniupnpd/install
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d $(1)/etc/config $(1)/etc/uci-defaults $(1)/etc/hotplug.d/iface $(1)/usr/share/miniupnpd
$(INSTALL_BIN) $(PKG_BUILD_DIR)/miniupnpd $(1)/usr/sbin/miniupnpd
$(INSTALL_BIN) ./files/miniupnpd.init $(1)/etc/init.d/miniupnpd
$(INSTALL_CONF) ./files/upnpd.config $(1)/etc/config/upnpd
$(INSTALL_DATA) ./files/miniupnpd.hotplug $(1)/etc/hotplug.d/iface/50-miniupnpd
$(INSTALL_DATA) ./files/miniupnpd.defaults $(1)/etc/uci-defaults/99-miniupnpd
$(INSTALL_DATA) ./files/firewall.include $(1)/usr/share/miniupnpd/firewall.include
endef
$(eval $(call BuildPackage,miniupnpd))

View File

@ -0,0 +1,57 @@
#!/bin/sh
# miniupnpd integration for firewall3
IP6TABLES=/usr/sbin/ip6tables
iptables -t filter -N MINIUPNPD 2>/dev/null
iptables -t nat -N MINIUPNPD 2>/dev/null
iptables -t nat -N MINIUPNPD-POSTROUTING 2>/dev/null
[ -x $IP6TABLES ] && $IP6TABLES -t filter -N MINIUPNPD 2>/dev/null
. /lib/functions/network.sh
ADDED=0
add_extzone_rules() {
local ext_zone=$1
[ -z "$ext_zone" ] && return
# IPv4 - due to NAT, need to add both to nat and filter table
iptables -t filter -I zone_${ext_zone}_forward -j MINIUPNPD
iptables -t nat -I zone_${ext_zone}_prerouting -j MINIUPNPD
iptables -t nat -I zone_${ext_zone}_postrouting -j MINIUPNPD-POSTROUTING
# IPv6 if available - filter only
[ -x $IP6TABLES ] && {
$IP6TABLES -t filter -I zone_${ext_zone}_forward -j MINIUPNPD
}
ADDED=$(($ADDED + 1))
}
# By default, user configuration is king.
for ext_iface in $(uci -q get upnpd.config.external_iface); do
add_extzone_rules $(fw3 -q network "$ext_iface")
done
add_extzone_rules $(uci -q get upnpd.config.external_zone)
[ ! $ADDED = 0 ] && exit 0
# If really nothing is available, resort to network_find_wan{,6} and
# assume external interfaces all have same firewall zone.
# (This heuristic may fail horribly, in case of e.g. multihoming, so
# please set external_zone in that case!)
network_find_wan wan_iface
network_find_wan6 wan6_iface
for ext_iface in $wan_iface $wan6_iface; do
# fw3 -q network fails on sub-interfaces => map to device first
network_get_device ext_device $ext_iface
add_extzone_rules $(fw3 -q device "$ext_device")
done

View File

@ -0,0 +1,13 @@
#!/bin/sh
uci -q batch <<-EOT
delete firewall.miniupnpd
set firewall.miniupnpd=include
set firewall.miniupnpd.type=script
set firewall.miniupnpd.path=/usr/share/miniupnpd/firewall.include
set firewall.miniupnpd.family=any
set firewall.miniupnpd.reload=1
commit firewall
EOT
exit 0

View File

@ -0,0 +1,39 @@
#!/bin/sh
/etc/init.d/miniupnpd enabled || exit 0
. /lib/functions/service.sh
# If miniupnpd is not running:
# - check on _any_ event (even updates may contribute to network_find_wan*)
# If miniupnpd _is_ running:
# - check only on ifup (otherwise lease updates etc would cause
# miniupnpd state loss)
[ ! "$ACTION" = "ifup" ] && service_check /usr/sbin/miniupnpd && exit 0
tmpconf="/var/etc/miniupnpd.conf"
extiface=$(uci -q get upnpd.config.external_iface)
extzone=$(uci -q get upnpd.config.external_zone)
. /lib/functions/network.sh
for iface in $(uci -q get upnpd.config.internal_iface); do
network_get_device device $iface
[ "$DEVICE" = "$device" ] && /etc/init.d/miniupnpd restart && exit 0
done
if [ -z "$extiface" ] ; then
# manual external zone (if dynamically find interfaces
# belonging to it) overrides network_find_wan*
if [ -n "$extzone" ] ; then
ifname=$(fw3 -q zone $extzone | head -1)
fi
[ -n "$extiface" ] || network_find_wan extiface
[ -n "$extiface" ] || network_find_wan6 extiface
fi
[ -n "$ifname" ] || network_get_device ifname ${extiface}
grep -qs "ext_ifname=$ifname" $tmpconf || /etc/init.d/miniupnpd restart

View File

@ -0,0 +1,212 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2014 OpenWrt.org
START=94
STOP=15
SERVICE_USE_PID=1
upnpd_get_port_range() {
local _var="$1"; shift
local _val
config_get _val "$@"
case "$_val" in
[0-9]*[:-][0-9]*)
export -n -- "${_var}_start=${_val%%[:-]*}"
export -n -- "${_var}_end=${_val##*[:-]}"
;;
[0-9]*)
export -n -- "${_var}_start=$_val"
export -n -- "${_var}_end="
;;
esac
}
conf_rule_add() {
local cfg="$1"
local tmpconf="$2"
local action external_port_start external_port_end int_addr
local internal_port_start internal_port_end
config_get action "$cfg" action "deny" # allow or deny
upnpd_get_port_range "ext" "$cfg" ext_ports "0-65535" # external ports: x, x-y, x:y
config_get int_addr "$cfg" int_addr "0.0.0.0/0" # ip or network and subnet mask (internal)
upnpd_get_port_range "int" "$cfg" int_ports "0-65535" # internal ports: x, x-y, x:y or range
# Make a single IP IP/32 so that miniupnpd.conf can use it.
case "$int_addr" in
*/*) ;;
*) int_addr="$int_addr/32" ;;
esac
echo "${action} ${ext_start}${ext_end:+-}${ext_end} ${int_addr} ${int_start}${int_end:+-}${int_end}" >>$tmpconf
}
upnpd_write_bool() {
local opt="$1"
local def="${2:-0}"
local alt="$3"
local val
config_get_bool val config "$opt" "$def"
if [ "$val" -eq 0 ]; then
echo "${alt:-$opt}=no" >> $tmpconf
else
echo "${alt:-$opt}=yes" >> $tmpconf
fi
}
boot() {
return
}
start() {
config_load "upnpd"
local extiface intiface upload download logging secure enabled natpmp
local extip port usesysuptime conffile serial_number model_number
local uuid notify_interval presentation_url enable_upnp
local upnp_lease_file clean_ruleset_threshold clean_ruleset_interval
local ipv6_listening_ip enabled
config_get_bool enabled config enabled 1
[ "$enabled" -gt 0 ] || return 1
config_get extiface config external_iface
config_get extzone config external_zone
config_get intiface config internal_iface
config_get extip config external_ip
config_get port config port 5000
config_get upload config upload
config_get download config download
config_get_bool logging config log_output 0
config_get conffile config config_file
config_get serial_number config serial_number
config_get model_number config model_number
config_get uuid config uuid
config_get notify_interval config notify_interval
config_get presentation_url config presentation_url
config_get upnp_lease_file config upnp_lease_file
config_get clean_ruleset_threshold config clean_ruleset_threshold
config_get clean_ruleset_interval config clean_ruleset_interval
config_get ipv6_listening_ip config ipv6_listening_ip
local args
. /lib/functions/network.sh
local ifname
# manual external interface overrides everything
if [ -z "$extiface" ] ; then
# manual external zone (if dynamically find interfaces
# belonging to it) overrides network_find_wan*
if [ -n "$extzone" ] ; then
ifname=$(fw3 -q zone $extzone | head -1)
fi
[ -n "$extiface" ] || network_find_wan extiface
[ -n "$extiface" ] || network_find_wan6 extiface
fi
[ -n "$ifname" ] || network_get_device ifname ${extiface}
if [ -n "$conffile" ]; then
args="-f $conffile"
else
local tmpconf="/var/etc/miniupnpd.conf"
args="-f $tmpconf"
mkdir -p /var/etc
echo "ext_ifname=$ifname" >$tmpconf
[ -n "$extip" ] && \
echo "ext_ip=$extip" >>$tmpconf
local iface
for iface in ${intiface:-lan}; do
local device
network_get_device device "$iface" && {
echo "listening_ip=$device" >>$tmpconf
}
done
[ "$port" != "auto" ] && \
echo "port=$port" >>$tmpconf
config_load "upnpd"
upnpd_write_bool enable_natpmp 1
upnpd_write_bool enable_upnp 1
upnpd_write_bool secure_mode 1
upnpd_write_bool pcp_allow_thirdparty 0
upnpd_write_bool system_uptime 1
[ -n "$upnp_lease_file" ] && \
echo "lease_file=$upnp_lease_file" >>$tmpconf
[ -n "$upload" -a -n "$download" ] && {
echo "bitrate_down=$(($download * 1024 * 8))" >>$tmpconf
echo "bitrate_up=$(($upload * 1024 * 8))" >>$tmpconf
}
[ -n "${presentation_url}" ] && \
echo "presentation_url=${presentation_url}" >>$tmpconf
[ -n "${notify_interval}" ] && \
echo "notify_interval=${notify_interval}" >>$tmpconf
[ -n "${clean_ruleset_threshold}" ] && \
echo "clean_ruleset_threshold=${clean_ruleset_threshold}" >>$tmpconf
[ -n "${clean_ruleset_interval}" ] && \
echo "clean_ruleset_interval=${clean_ruleset_interval}" >>$tmpconf
[ -n "${ipv6_listening_ip}" ] && \
echo "ipv6_listening_ip=${ipv6_listening_ip}" >>$tmpconf
[ -z "$uuid" ] && {
uuid="$(cat /proc/sys/kernel/random/uuid)"
uci set upnpd.config.uuid=$uuid
uci commit upnpd
}
[ "$uuid" = "nocli" ] || \
echo "uuid=$uuid" >>$tmpconf
[ -n "${serial_number}" ] && \
echo "serial=${serial_number}" >>$tmpconf
[ -n "${model_number}" ] && \
echo "model_number=${model_number}" >>$tmpconf
config_foreach conf_rule_add perm_rule "$tmpconf"
fi
if [ -n "$ifname" ]; then
# start firewall
iptables -L MINIUPNPD >/dev/null 2>/dev/null || fw3 reload
if [ "$logging" = "1" ]; then
SERVICE_DAEMONIZE=1 \
service_start /usr/sbin/miniupnpd $args -d
else
SERVICE_DAEMONIZE= \
service_start /usr/sbin/miniupnpd $args
fi
else
logger -t "upnp daemon" "external interface not found, not starting"
fi
}
stop() {
service_stop /usr/sbin/miniupnpd
iptables -t nat -F MINIUPNPD 2>/dev/null
iptables -t filter -F MINIUPNPD 2>/dev/null
[ -x /usr/sbin/ip6tables ] && {
ip6tables -t filter -F MINIUPNPD 2>/dev/null
}
}

Some files were not shown because too many files have changed in this diff Show More