mirror of
https://github.com/bolucat/Archive.git
synced 2025-09-26 20:21:35 +08:00
Update On Mon May 19 20:37:16 CEST 2025
This commit is contained in:
1
.github/update.log
vendored
1
.github/update.log
vendored
@@ -1003,3 +1003,4 @@ Update On Thu May 15 20:37:42 CEST 2025
|
||||
Update On Fri May 16 20:36:33 CEST 2025
|
||||
Update On Sat May 17 20:35:13 CEST 2025
|
||||
Update On Sun May 18 20:35:03 CEST 2025
|
||||
Update On Mon May 19 20:37:08 CEST 2025
|
||||
|
@@ -3,6 +3,7 @@ package updater
|
||||
import (
|
||||
"archive/tar"
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -32,6 +33,17 @@ const (
|
||||
typeTarGzip
|
||||
)
|
||||
|
||||
func (t compressionType) String() string {
|
||||
switch t {
|
||||
case typeZip:
|
||||
return "zip"
|
||||
case typeTarGzip:
|
||||
return "tar.gz"
|
||||
default:
|
||||
return "unknown"
|
||||
}
|
||||
}
|
||||
|
||||
var DefaultUiUpdater = &UIUpdater{}
|
||||
|
||||
func NewUiUpdater(externalUI, externalUIURL, externalUIName string) *UIUpdater {
|
||||
@@ -99,48 +111,35 @@ func detectFileType(data []byte) compressionType {
|
||||
}
|
||||
|
||||
func (u *UIUpdater) downloadUI() error {
|
||||
err := u.prepareUIPath()
|
||||
if err != nil {
|
||||
return fmt.Errorf("prepare UI path failed: %w", err)
|
||||
}
|
||||
|
||||
data, err := downloadForBytes(u.externalUIURL)
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't download file: %w", err)
|
||||
}
|
||||
|
||||
fileType := detectFileType(data)
|
||||
if fileType == typeUnknown {
|
||||
return fmt.Errorf("unknown or unsupported file type")
|
||||
tmpDir := C.Path.Resolve("downloadUI.tmp")
|
||||
defer os.RemoveAll(tmpDir)
|
||||
extractedFolder, err := extract(data, tmpDir)
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't extract compressed file: %w", err)
|
||||
}
|
||||
|
||||
ext := ".zip"
|
||||
if fileType == typeTarGzip {
|
||||
ext = ".tgz"
|
||||
}
|
||||
|
||||
saved := path.Join(C.Path.HomeDir(), "download"+ext)
|
||||
log.Debugln("compression Type: %s", ext)
|
||||
if err = saveFile(data, saved); err != nil {
|
||||
return fmt.Errorf("can't save compressed file: %w", err)
|
||||
}
|
||||
defer os.Remove(saved)
|
||||
|
||||
err = cleanup(u.externalUIPath)
|
||||
log.Debugln("cleanupFolder: %s", u.externalUIPath)
|
||||
err = cleanup(u.externalUIPath) // cleanup files in dir don't remove dir itself
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
return fmt.Errorf("cleanup exist file error: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
extractedFolder, err := extract(saved, C.Path.HomeDir())
|
||||
err = u.prepareUIPath()
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't extract compressed file: %w", err)
|
||||
return fmt.Errorf("prepare UI path failed: %w", err)
|
||||
}
|
||||
|
||||
err = os.Rename(extractedFolder, u.externalUIPath)
|
||||
log.Debugln("moveFolder from %s to %s", extractedFolder, u.externalUIPath)
|
||||
err = moveDir(extractedFolder, u.externalUIPath) // move files from tmp to target
|
||||
if err != nil {
|
||||
return fmt.Errorf("rename UI folder failed: %w", err)
|
||||
return fmt.Errorf("move UI folder failed: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -155,12 +154,11 @@ func (u *UIUpdater) prepareUIPath() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func unzip(src, dest string) (string, error) {
|
||||
r, err := zip.OpenReader(src)
|
||||
func unzip(data []byte, dest string) (string, error) {
|
||||
r, err := zip.NewReader(bytes.NewReader(data), int64(len(data)))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer r.Close()
|
||||
|
||||
// check whether or not only exists singleRoot dir
|
||||
rootDir := ""
|
||||
@@ -199,17 +197,7 @@ func unzip(src, dest string) (string, error) {
|
||||
log.Debugln("extractedFolder: %s", extractedFolder)
|
||||
} else {
|
||||
log.Debugln("Match the multiRoot")
|
||||
// or put the files/dirs into new dir
|
||||
baseName := filepath.Base(src)
|
||||
baseName = strings.TrimSuffix(baseName, filepath.Ext(baseName))
|
||||
extractedFolder = filepath.Join(dest, baseName)
|
||||
|
||||
for i := 1; ; i++ {
|
||||
if _, err := os.Stat(extractedFolder); os.IsNotExist(err) {
|
||||
break
|
||||
}
|
||||
extractedFolder = filepath.Join(dest, fmt.Sprintf("%s_%d", baseName, i))
|
||||
}
|
||||
extractedFolder = dest
|
||||
log.Debugln("extractedFolder: %s", extractedFolder)
|
||||
}
|
||||
|
||||
@@ -221,13 +209,17 @@ func unzip(src, dest string) (string, error) {
|
||||
fpath = filepath.Join(extractedFolder, f.Name)
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(fpath, filepath.Clean(dest)+string(os.PathSeparator)) {
|
||||
if !inDest(fpath, dest) {
|
||||
return "", fmt.Errorf("invalid file path: %s", fpath)
|
||||
}
|
||||
if f.FileInfo().IsDir() {
|
||||
info := f.FileInfo()
|
||||
if info.IsDir() {
|
||||
os.MkdirAll(fpath, os.ModePerm)
|
||||
continue
|
||||
}
|
||||
if info.Mode()&os.ModeSymlink != 0 {
|
||||
continue // disallow symlink
|
||||
}
|
||||
if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -249,14 +241,8 @@ func unzip(src, dest string) (string, error) {
|
||||
return extractedFolder, nil
|
||||
}
|
||||
|
||||
func untgz(src, dest string) (string, error) {
|
||||
file, err := os.Open(src)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
gzr, err := gzip.NewReader(file)
|
||||
func untgz(data []byte, dest string) (string, error) {
|
||||
gzr, err := gzip.NewReader(bytes.NewReader(data))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -299,8 +285,7 @@ func untgz(src, dest string) (string, error) {
|
||||
isSingleRoot = false
|
||||
}
|
||||
|
||||
file.Seek(0, 0)
|
||||
gzr, _ = gzip.NewReader(file)
|
||||
_ = gzr.Reset(bytes.NewReader(data))
|
||||
tr = tar.NewReader(gzr)
|
||||
|
||||
var extractedFolder string
|
||||
@@ -310,17 +295,7 @@ func untgz(src, dest string) (string, error) {
|
||||
log.Debugln("extractedFolder: %s", extractedFolder)
|
||||
} else {
|
||||
log.Debugln("Match the multiRoot")
|
||||
baseName := filepath.Base(src)
|
||||
baseName = strings.TrimSuffix(baseName, filepath.Ext(baseName))
|
||||
baseName = strings.TrimSuffix(baseName, ".tar")
|
||||
extractedFolder = filepath.Join(dest, baseName)
|
||||
|
||||
for i := 1; ; i++ {
|
||||
if _, err := os.Stat(extractedFolder); os.IsNotExist(err) {
|
||||
break
|
||||
}
|
||||
extractedFolder = filepath.Join(dest, fmt.Sprintf("%s_%d", baseName, i))
|
||||
}
|
||||
extractedFolder = dest
|
||||
log.Debugln("extractedFolder: %s", extractedFolder)
|
||||
}
|
||||
|
||||
@@ -340,7 +315,7 @@ func untgz(src, dest string) (string, error) {
|
||||
fpath = filepath.Join(extractedFolder, cleanTarPath(header.Name))
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(fpath, filepath.Clean(dest)+string(os.PathSeparator)) {
|
||||
if !inDest(fpath, dest) {
|
||||
return "", fmt.Errorf("invalid file path: %s", fpath)
|
||||
}
|
||||
|
||||
@@ -367,16 +342,16 @@ func untgz(src, dest string) (string, error) {
|
||||
return extractedFolder, nil
|
||||
}
|
||||
|
||||
func extract(src, dest string) (string, error) {
|
||||
srcLower := strings.ToLower(src)
|
||||
switch {
|
||||
case strings.HasSuffix(srcLower, ".tar.gz") ||
|
||||
strings.HasSuffix(srcLower, ".tgz"):
|
||||
return untgz(src, dest)
|
||||
case strings.HasSuffix(srcLower, ".zip"):
|
||||
return unzip(src, dest)
|
||||
func extract(data []byte, dest string) (string, error) {
|
||||
fileType := detectFileType(data)
|
||||
log.Debugln("compression Type: %s", fileType)
|
||||
switch fileType {
|
||||
case typeZip:
|
||||
return unzip(data, dest)
|
||||
case typeTarGzip:
|
||||
return untgz(data, dest)
|
||||
default:
|
||||
return "", fmt.Errorf("unsupported file format: %s", src)
|
||||
return "", fmt.Errorf("unknown or unsupported file type")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,22 +373,40 @@ func cleanTarPath(path string) string {
|
||||
}
|
||||
|
||||
func cleanup(root string) error {
|
||||
if _, err := os.Stat(root); os.IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
return filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
||||
dirEntryList, err := os.ReadDir(root)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if info.IsDir() {
|
||||
if err := os.RemoveAll(path); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if err := os.Remove(path); err != nil {
|
||||
|
||||
for _, dirEntry := range dirEntryList {
|
||||
err = os.RemoveAll(filepath.Join(root, dirEntry.Name()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func moveDir(src string, dst string) error {
|
||||
dirEntryList, err := os.ReadDir(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, dirEntry := range dirEntryList {
|
||||
err = os.Rename(filepath.Join(src, dirEntry.Name()), filepath.Join(dst, dirEntry.Name()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func inDest(fpath, dest string) bool {
|
||||
if rel, err := filepath.Rel(dest, fpath); err == nil {
|
||||
if filepath.IsLocal(rel) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
@@ -7,6 +7,7 @@ import (
|
||||
"net"
|
||||
"net/netip"
|
||||
"net/url"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
_ "unsafe"
|
||||
@@ -759,6 +760,9 @@ func parseController(cfg *RawConfig) (*Controller, error) {
|
||||
if path := cfg.ExternalUI; path != "" && !C.Path.IsSafePath(path) {
|
||||
return nil, C.Path.ErrNotSafePath(path)
|
||||
}
|
||||
if uiName := cfg.ExternalUIName; uiName != "" && !filepath.IsLocal(uiName) {
|
||||
return nil, fmt.Errorf("external UI name is not local: %s", uiName)
|
||||
}
|
||||
return &Controller{
|
||||
ExternalController: cfg.ExternalController,
|
||||
ExternalUI: cfg.ExternalUI,
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"manifest_version": 1,
|
||||
"latest": {
|
||||
"mihomo": "v1.19.8",
|
||||
"mihomo_alpha": "alpha-303f5e3",
|
||||
"mihomo_alpha": "alpha-d036d98",
|
||||
"clash_rs": "v0.7.8",
|
||||
"clash_premium": "2023-09-05-gdcc8d87",
|
||||
"clash_rs_alpha": "0.7.7-alpha+sha.72871ca"
|
||||
@@ -69,5 +69,5 @@
|
||||
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
|
||||
}
|
||||
},
|
||||
"updated_at": "2025-05-17T22:20:46.645Z"
|
||||
"updated_at": "2025-05-18T22:20:58.018Z"
|
||||
}
|
||||
|
@@ -69,7 +69,7 @@
|
||||
"postcss": "^8.5.1",
|
||||
"prettier": "^3.4.2",
|
||||
"terser": "^5.37.0",
|
||||
"vite": "^6.0.11",
|
||||
"vite": "^6.1.6",
|
||||
"vite-plugin-compression2": "^1.0.0",
|
||||
"vue-tsc": "^2.2.0"
|
||||
},
|
||||
|
283
filebrowser/frontend/pnpm-lock.yaml
generated
283
filebrowser/frontend/pnpm-lock.yaml
generated
@@ -98,7 +98,7 @@ importers:
|
||||
devDependencies:
|
||||
'@intlify/unplugin-vue-i18n':
|
||||
specifier: ^6.0.3
|
||||
version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0)(rollup@4.32.0)(typescript@5.6.3)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
|
||||
version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0)(rollup@4.40.1)(typescript@5.6.3)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
|
||||
'@playwright/test':
|
||||
specifier: ^1.50.0
|
||||
version: 1.50.0
|
||||
@@ -116,10 +116,10 @@ importers:
|
||||
version: 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0)(typescript@5.6.3))(eslint@9.19.0)(typescript@5.6.3)
|
||||
'@vitejs/plugin-legacy':
|
||||
specifier: ^6.0.0
|
||||
version: 6.0.0(terser@5.37.0)(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))
|
||||
version: 6.0.0(terser@5.37.0)(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))
|
||||
'@vitejs/plugin-vue':
|
||||
specifier: ^5.0.4
|
||||
version: 5.2.1(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.6.3))
|
||||
version: 5.2.1(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.6.3))
|
||||
'@vue/eslint-config-prettier':
|
||||
specifier: ^10.2.0
|
||||
version: 10.2.0(eslint@9.19.0)(prettier@3.4.2)
|
||||
@@ -157,11 +157,11 @@ importers:
|
||||
specifier: ^5.37.0
|
||||
version: 5.37.0
|
||||
vite:
|
||||
specifier: ^6.0.11
|
||||
version: 6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
|
||||
specifier: ^6.1.6
|
||||
version: 6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
|
||||
vite-plugin-compression2:
|
||||
specifier: ^1.0.0
|
||||
version: 1.3.3(rollup@4.32.0)(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))
|
||||
version: 1.3.3(rollup@4.40.1)(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))
|
||||
vue-tsc:
|
||||
specifier: ^2.2.0
|
||||
version: 2.2.0(typescript@5.6.3)
|
||||
@@ -934,22 +934,26 @@ packages:
|
||||
resolution: {integrity: sha512-nmG512G8QOABsserleechwHGZxzKSAlggGf9hQX0nltvSwyKNVuB/4o6iFeG2OnjXK253r8p8eSDOZf8PgFdWw==}
|
||||
engines: {node: '>= 16'}
|
||||
|
||||
'@intlify/message-compiler@11.0.0-rc.1':
|
||||
resolution: {integrity: sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==}
|
||||
engines: {node: '>= 16'}
|
||||
|
||||
'@intlify/message-compiler@11.1.2':
|
||||
resolution: {integrity: sha512-T/xbNDzi+Yv0Qn2Dfz2CWCAJiwNgU5d95EhhAEf4YmOgjCKktpfpiUSmLcBvK1CtLpPQ85AMMQk/2NCcXnNj1g==}
|
||||
engines: {node: '>= 16'}
|
||||
|
||||
'@intlify/shared@11.0.0-rc.1':
|
||||
resolution: {integrity: sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==}
|
||||
'@intlify/message-compiler@12.0.0-alpha.2':
|
||||
resolution: {integrity: sha512-PD9C+oQbb7BF52hec0+vLnScaFkvnfX+R7zSbODYuRo/E2niAtGmHd0wPvEMsDhf9Z9b8f/qyDsVeZnD/ya9Ug==}
|
||||
engines: {node: '>= 16'}
|
||||
|
||||
'@intlify/shared@11.1.2':
|
||||
resolution: {integrity: sha512-dF2iMMy8P9uKVHV/20LA1ulFLL+MKSbfMiixSmn6fpwqzvix38OIc7ebgnFbBqElvghZCW9ACtzKTGKsTGTWGA==}
|
||||
engines: {node: '>= 16'}
|
||||
|
||||
'@intlify/shared@11.1.3':
|
||||
resolution: {integrity: sha512-pTFBgqa/99JRA2H1qfyqv97MKWJrYngXBA/I0elZcYxvJgcCw3mApAoPW3mJ7vx3j+Ti0FyKUFZ4hWxdjKaxvA==}
|
||||
engines: {node: '>= 16'}
|
||||
|
||||
'@intlify/shared@12.0.0-alpha.2':
|
||||
resolution: {integrity: sha512-P2DULVX9nz3y8zKNqLw9Es1aAgQ1JGC+kgpx5q7yLmrnAKkPR5MybQWoEhxanefNJgUY5ehsgo+GKif59SrncA==}
|
||||
engines: {node: '>= 16'}
|
||||
|
||||
'@intlify/unplugin-vue-i18n@6.0.3':
|
||||
resolution: {integrity: sha512-9ZDjBlhUHtgjRl23TVcgfJttgu8cNepwVhWvOv3mUMRDAhjW0pur1mWKEUKr1I8PNwE4Gvv2IQ1xcl4RL0nG0g==}
|
||||
engines: {node: '>= 18'}
|
||||
@@ -1045,98 +1049,103 @@ packages:
|
||||
rollup:
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-android-arm-eabi@4.32.0':
|
||||
resolution: {integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==}
|
||||
'@rollup/rollup-android-arm-eabi@4.40.1':
|
||||
resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@rollup/rollup-android-arm64@4.32.0':
|
||||
resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==}
|
||||
'@rollup/rollup-android-arm64@4.40.1':
|
||||
resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@rollup/rollup-darwin-arm64@4.32.0':
|
||||
resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==}
|
||||
'@rollup/rollup-darwin-arm64@4.40.1':
|
||||
resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@rollup/rollup-darwin-x64@4.32.0':
|
||||
resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==}
|
||||
'@rollup/rollup-darwin-x64@4.40.1':
|
||||
resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@rollup/rollup-freebsd-arm64@4.32.0':
|
||||
resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==}
|
||||
'@rollup/rollup-freebsd-arm64@4.40.1':
|
||||
resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
|
||||
'@rollup/rollup-freebsd-x64@4.32.0':
|
||||
resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==}
|
||||
'@rollup/rollup-freebsd-x64@4.40.1':
|
||||
resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@rollup/rollup-linux-arm-gnueabihf@4.32.0':
|
||||
resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==}
|
||||
'@rollup/rollup-linux-arm-gnueabihf@4.40.1':
|
||||
resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.32.0':
|
||||
resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==}
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.40.1':
|
||||
resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-arm64-gnu@4.32.0':
|
||||
resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==}
|
||||
'@rollup/rollup-linux-arm64-gnu@4.40.1':
|
||||
resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-arm64-musl@4.32.0':
|
||||
resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==}
|
||||
'@rollup/rollup-linux-arm64-musl@4.40.1':
|
||||
resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-loongarch64-gnu@4.32.0':
|
||||
resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==}
|
||||
'@rollup/rollup-linux-loongarch64-gnu@4.40.1':
|
||||
resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.32.0':
|
||||
resolution: {integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==}
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
|
||||
resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.32.0':
|
||||
resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==}
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.40.1':
|
||||
resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-s390x-gnu@4.32.0':
|
||||
resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==}
|
||||
'@rollup/rollup-linux-riscv64-musl@4.40.1':
|
||||
resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-s390x-gnu@4.40.1':
|
||||
resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-x64-gnu@4.32.0':
|
||||
resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==}
|
||||
'@rollup/rollup-linux-x64-gnu@4.40.1':
|
||||
resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-x64-musl@4.32.0':
|
||||
resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==}
|
||||
'@rollup/rollup-linux-x64-musl@4.40.1':
|
||||
resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-win32-arm64-msvc@4.32.0':
|
||||
resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==}
|
||||
'@rollup/rollup-win32-arm64-msvc@4.40.1':
|
||||
resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@rollup/rollup-win32-ia32-msvc@4.32.0':
|
||||
resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==}
|
||||
'@rollup/rollup-win32-ia32-msvc@4.40.1':
|
||||
resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@rollup/rollup-win32-x64-msvc@4.32.0':
|
||||
resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==}
|
||||
'@rollup/rollup-win32-x64-msvc@4.40.1':
|
||||
resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
@@ -1146,6 +1155,9 @@ packages:
|
||||
'@types/estree@1.0.6':
|
||||
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
|
||||
|
||||
'@types/estree@1.0.7':
|
||||
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
|
||||
|
||||
'@types/json-schema@7.0.15':
|
||||
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
||||
|
||||
@@ -2086,6 +2098,11 @@ packages:
|
||||
engines: {node: '>=8', npm: '>=5'}
|
||||
hasBin: true
|
||||
|
||||
nanoid@3.3.11:
|
||||
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
hasBin: true
|
||||
|
||||
nanoid@3.3.8:
|
||||
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
@@ -2206,6 +2223,10 @@ packages:
|
||||
resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
|
||||
postcss@8.5.3:
|
||||
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
|
||||
prelude-ls@1.2.1:
|
||||
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@@ -2298,8 +2319,8 @@ packages:
|
||||
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
|
||||
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
|
||||
|
||||
rollup@4.32.0:
|
||||
resolution: {integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==}
|
||||
rollup@4.40.1:
|
||||
resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==}
|
||||
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
||||
hasBin: true
|
||||
|
||||
@@ -2540,8 +2561,8 @@ packages:
|
||||
peerDependencies:
|
||||
vite: ^2.0.0||^3.0.0||^4.0.0||^5.0.0 ||^6.0.0
|
||||
|
||||
vite@6.0.11:
|
||||
resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==}
|
||||
vite@6.1.6:
|
||||
resolution: {integrity: sha512-u+jokLMwHVFUoUkfL+m/1hzucejL2639g9QXcrRdtN3WPHfW7imI83V96Oh1R0xVZqDjvcgp+7S8bSQpdVlmPA==}
|
||||
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -3578,8 +3599,8 @@ snapshots:
|
||||
|
||||
'@intlify/bundle-utils@10.0.0(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))':
|
||||
dependencies:
|
||||
'@intlify/message-compiler': 11.0.0-rc.1
|
||||
'@intlify/shared': 11.0.0-rc.1
|
||||
'@intlify/message-compiler': 12.0.0-alpha.2
|
||||
'@intlify/shared': 12.0.0-alpha.2
|
||||
acorn: 8.14.0
|
||||
escodegen: 2.1.0
|
||||
estree-walker: 2.0.2
|
||||
@@ -3595,27 +3616,29 @@ snapshots:
|
||||
'@intlify/message-compiler': 11.1.2
|
||||
'@intlify/shared': 11.1.2
|
||||
|
||||
'@intlify/message-compiler@11.0.0-rc.1':
|
||||
dependencies:
|
||||
'@intlify/shared': 11.0.0-rc.1
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@intlify/message-compiler@11.1.2':
|
||||
dependencies:
|
||||
'@intlify/shared': 11.1.2
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@intlify/shared@11.0.0-rc.1': {}
|
||||
'@intlify/message-compiler@12.0.0-alpha.2':
|
||||
dependencies:
|
||||
'@intlify/shared': 12.0.0-alpha.2
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@intlify/shared@11.1.2': {}
|
||||
|
||||
'@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0)(rollup@4.32.0)(typescript@5.6.3)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))':
|
||||
'@intlify/shared@11.1.3': {}
|
||||
|
||||
'@intlify/shared@12.0.0-alpha.2': {}
|
||||
|
||||
'@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0)(rollup@4.40.1)(typescript@5.6.3)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))':
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0)
|
||||
'@intlify/bundle-utils': 10.0.0(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))
|
||||
'@intlify/shared': 11.1.2
|
||||
'@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
|
||||
'@rollup/pluginutils': 5.1.4(rollup@4.32.0)
|
||||
'@intlify/shared': 11.1.3
|
||||
'@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.3)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
|
||||
'@rollup/pluginutils': 5.1.4(rollup@4.40.1)
|
||||
'@typescript-eslint/scope-manager': 8.21.0
|
||||
'@typescript-eslint/typescript-estree': 8.21.0(typescript@5.6.3)
|
||||
debug: 4.4.0
|
||||
@@ -3636,11 +3659,11 @@ snapshots:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
'@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))':
|
||||
'@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.3)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))':
|
||||
dependencies:
|
||||
'@babel/parser': 7.26.7
|
||||
optionalDependencies:
|
||||
'@intlify/shared': 11.1.2
|
||||
'@intlify/shared': 11.1.3
|
||||
'@vue/compiler-dom': 3.5.13
|
||||
vue: 3.5.13(typescript@5.6.3)
|
||||
vue-i18n: 11.1.2(vue@3.5.13(typescript@5.6.3))
|
||||
@@ -3691,83 +3714,88 @@ snapshots:
|
||||
dependencies:
|
||||
playwright: 1.50.0
|
||||
|
||||
'@rollup/pluginutils@5.1.3(rollup@4.32.0)':
|
||||
'@rollup/pluginutils@5.1.3(rollup@4.40.1)':
|
||||
dependencies:
|
||||
'@types/estree': 1.0.6
|
||||
estree-walker: 2.0.2
|
||||
picomatch: 4.0.2
|
||||
optionalDependencies:
|
||||
rollup: 4.32.0
|
||||
rollup: 4.40.1
|
||||
|
||||
'@rollup/pluginutils@5.1.4(rollup@4.32.0)':
|
||||
'@rollup/pluginutils@5.1.4(rollup@4.40.1)':
|
||||
dependencies:
|
||||
'@types/estree': 1.0.6
|
||||
estree-walker: 2.0.2
|
||||
picomatch: 4.0.2
|
||||
optionalDependencies:
|
||||
rollup: 4.32.0
|
||||
rollup: 4.40.1
|
||||
|
||||
'@rollup/rollup-android-arm-eabi@4.32.0':
|
||||
'@rollup/rollup-android-arm-eabi@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-android-arm64@4.32.0':
|
||||
'@rollup/rollup-android-arm64@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-darwin-arm64@4.32.0':
|
||||
'@rollup/rollup-darwin-arm64@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-darwin-x64@4.32.0':
|
||||
'@rollup/rollup-darwin-x64@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-freebsd-arm64@4.32.0':
|
||||
'@rollup/rollup-freebsd-arm64@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-freebsd-x64@4.32.0':
|
||||
'@rollup/rollup-freebsd-x64@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-arm-gnueabihf@4.32.0':
|
||||
'@rollup/rollup-linux-arm-gnueabihf@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.32.0':
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-arm64-gnu@4.32.0':
|
||||
'@rollup/rollup-linux-arm64-gnu@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-arm64-musl@4.32.0':
|
||||
'@rollup/rollup-linux-arm64-musl@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-loongarch64-gnu@4.32.0':
|
||||
'@rollup/rollup-linux-loongarch64-gnu@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.32.0':
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.32.0':
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-s390x-gnu@4.32.0':
|
||||
'@rollup/rollup-linux-riscv64-musl@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-x64-gnu@4.32.0':
|
||||
'@rollup/rollup-linux-s390x-gnu@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-x64-musl@4.32.0':
|
||||
'@rollup/rollup-linux-x64-gnu@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-win32-arm64-msvc@4.32.0':
|
||||
'@rollup/rollup-linux-x64-musl@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-win32-ia32-msvc@4.32.0':
|
||||
'@rollup/rollup-win32-arm64-msvc@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-win32-x64-msvc@4.32.0':
|
||||
'@rollup/rollup-win32-ia32-msvc@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-win32-x64-msvc@4.40.1':
|
||||
optional: true
|
||||
|
||||
'@tsconfig/node22@22.0.0': {}
|
||||
|
||||
'@types/estree@1.0.6': {}
|
||||
|
||||
'@types/estree@1.0.7': {}
|
||||
|
||||
'@types/json-schema@7.0.15': {}
|
||||
|
||||
'@types/localforage@0.0.34':
|
||||
@@ -3885,7 +3913,7 @@ snapshots:
|
||||
global: 4.4.0
|
||||
is-function: 1.0.2
|
||||
|
||||
'@vitejs/plugin-legacy@6.0.0(terser@5.37.0)(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))':
|
||||
'@vitejs/plugin-legacy@6.0.0(terser@5.37.0)(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.26.0
|
||||
'@babel/preset-env': 7.26.0(@babel/core@7.26.0)
|
||||
@@ -3896,13 +3924,13 @@ snapshots:
|
||||
regenerator-runtime: 0.14.1
|
||||
systemjs: 6.15.1
|
||||
terser: 5.37.0
|
||||
vite: 6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
|
||||
vite: 6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@vitejs/plugin-vue@5.2.1(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.6.3))':
|
||||
'@vitejs/plugin-vue@5.2.1(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.6.3))':
|
||||
dependencies:
|
||||
vite: 6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
|
||||
vite: 6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
|
||||
vue: 3.5.13(typescript@5.6.3)
|
||||
|
||||
'@volar/language-core@2.4.11':
|
||||
@@ -3939,7 +3967,7 @@ snapshots:
|
||||
'@vue/shared': 3.5.13
|
||||
estree-walker: 2.0.2
|
||||
magic-string: 0.30.14
|
||||
postcss: 8.5.1
|
||||
postcss: 8.5.3
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@vue/compiler-ssr@3.5.13':
|
||||
@@ -4805,6 +4833,8 @@ snapshots:
|
||||
'@babel/runtime': 7.26.7
|
||||
global: 4.4.0
|
||||
|
||||
nanoid@3.3.11: {}
|
||||
|
||||
nanoid@3.3.8: {}
|
||||
|
||||
natural-compare@1.4.0: {}
|
||||
@@ -4911,6 +4941,12 @@ snapshots:
|
||||
picocolors: 1.1.1
|
||||
source-map-js: 1.2.1
|
||||
|
||||
postcss@8.5.3:
|
||||
dependencies:
|
||||
nanoid: 3.3.11
|
||||
picocolors: 1.1.1
|
||||
source-map-js: 1.2.1
|
||||
|
||||
prelude-ls@1.2.1: {}
|
||||
|
||||
prettier-linter-helpers@1.0.0:
|
||||
@@ -4994,29 +5030,30 @@ snapshots:
|
||||
|
||||
reusify@1.0.4: {}
|
||||
|
||||
rollup@4.32.0:
|
||||
rollup@4.40.1:
|
||||
dependencies:
|
||||
'@types/estree': 1.0.6
|
||||
'@types/estree': 1.0.7
|
||||
optionalDependencies:
|
||||
'@rollup/rollup-android-arm-eabi': 4.32.0
|
||||
'@rollup/rollup-android-arm64': 4.32.0
|
||||
'@rollup/rollup-darwin-arm64': 4.32.0
|
||||
'@rollup/rollup-darwin-x64': 4.32.0
|
||||
'@rollup/rollup-freebsd-arm64': 4.32.0
|
||||
'@rollup/rollup-freebsd-x64': 4.32.0
|
||||
'@rollup/rollup-linux-arm-gnueabihf': 4.32.0
|
||||
'@rollup/rollup-linux-arm-musleabihf': 4.32.0
|
||||
'@rollup/rollup-linux-arm64-gnu': 4.32.0
|
||||
'@rollup/rollup-linux-arm64-musl': 4.32.0
|
||||
'@rollup/rollup-linux-loongarch64-gnu': 4.32.0
|
||||
'@rollup/rollup-linux-powerpc64le-gnu': 4.32.0
|
||||
'@rollup/rollup-linux-riscv64-gnu': 4.32.0
|
||||
'@rollup/rollup-linux-s390x-gnu': 4.32.0
|
||||
'@rollup/rollup-linux-x64-gnu': 4.32.0
|
||||
'@rollup/rollup-linux-x64-musl': 4.32.0
|
||||
'@rollup/rollup-win32-arm64-msvc': 4.32.0
|
||||
'@rollup/rollup-win32-ia32-msvc': 4.32.0
|
||||
'@rollup/rollup-win32-x64-msvc': 4.32.0
|
||||
'@rollup/rollup-android-arm-eabi': 4.40.1
|
||||
'@rollup/rollup-android-arm64': 4.40.1
|
||||
'@rollup/rollup-darwin-arm64': 4.40.1
|
||||
'@rollup/rollup-darwin-x64': 4.40.1
|
||||
'@rollup/rollup-freebsd-arm64': 4.40.1
|
||||
'@rollup/rollup-freebsd-x64': 4.40.1
|
||||
'@rollup/rollup-linux-arm-gnueabihf': 4.40.1
|
||||
'@rollup/rollup-linux-arm-musleabihf': 4.40.1
|
||||
'@rollup/rollup-linux-arm64-gnu': 4.40.1
|
||||
'@rollup/rollup-linux-arm64-musl': 4.40.1
|
||||
'@rollup/rollup-linux-loongarch64-gnu': 4.40.1
|
||||
'@rollup/rollup-linux-powerpc64le-gnu': 4.40.1
|
||||
'@rollup/rollup-linux-riscv64-gnu': 4.40.1
|
||||
'@rollup/rollup-linux-riscv64-musl': 4.40.1
|
||||
'@rollup/rollup-linux-s390x-gnu': 4.40.1
|
||||
'@rollup/rollup-linux-x64-gnu': 4.40.1
|
||||
'@rollup/rollup-linux-x64-musl': 4.40.1
|
||||
'@rollup/rollup-win32-arm64-msvc': 4.40.1
|
||||
'@rollup/rollup-win32-ia32-msvc': 4.40.1
|
||||
'@rollup/rollup-win32-x64-msvc': 4.40.1
|
||||
fsevents: 2.3.3
|
||||
|
||||
rrweb-cssom@0.8.0: {}
|
||||
@@ -5238,19 +5275,19 @@ snapshots:
|
||||
dependencies:
|
||||
global: 4.4.0
|
||||
|
||||
vite-plugin-compression2@1.3.3(rollup@4.32.0)(vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)):
|
||||
vite-plugin-compression2@1.3.3(rollup@4.40.1)(vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)):
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 5.1.3(rollup@4.32.0)
|
||||
'@rollup/pluginutils': 5.1.3(rollup@4.40.1)
|
||||
tar-mini: 0.2.0
|
||||
vite: 6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
|
||||
vite: 6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
|
||||
vite@6.0.11(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0):
|
||||
vite@6.1.6(@types/node@22.10.10)(terser@5.37.0)(yaml@2.7.0):
|
||||
dependencies:
|
||||
esbuild: 0.24.2
|
||||
postcss: 8.5.1
|
||||
rollup: 4.32.0
|
||||
postcss: 8.5.3
|
||||
rollup: 4.40.1
|
||||
optionalDependencies:
|
||||
'@types/node': 22.10.10
|
||||
fsevents: 2.3.3
|
||||
|
@@ -1,6 +1,6 @@
|
||||
module github.com/filebrowser/filebrowser/v2
|
||||
|
||||
go 1.23
|
||||
go 1.23.0
|
||||
|
||||
require (
|
||||
github.com/asdine/storm/v3 v3.2.1
|
||||
@@ -24,9 +24,9 @@ require (
|
||||
github.com/stretchr/testify v1.9.0
|
||||
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce
|
||||
go.etcd.io/bbolt v1.3.11
|
||||
golang.org/x/crypto v0.31.0
|
||||
golang.org/x/crypto v0.36.0
|
||||
golang.org/x/image v0.19.0
|
||||
golang.org/x/text v0.21.0
|
||||
golang.org/x/text v0.23.0
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
)
|
||||
@@ -64,8 +64,8 @@ require (
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect
|
||||
golang.org/x/net v0.33.0 // indirect
|
||||
golang.org/x/sys v0.28.0 // indirect
|
||||
golang.org/x/net v0.38.0 // indirect
|
||||
golang.org/x/sys v0.31.0 // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
|
@@ -174,8 +174,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
|
||||
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
|
||||
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
|
||||
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw=
|
||||
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
@@ -190,10 +190,10 @@ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/
|
||||
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
||||
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
|
||||
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -204,14 +204,14 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
|
||||
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
|
||||
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
|
||||
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||
|
@@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.12 = .28
|
||||
LINUX_KERNEL_HASH-6.12.28 = e8a099182562aecff781de72ce769461e706d97af42d740dff20eb450dd5771e
|
||||
LINUX_VERSION-6.12 = .29
|
||||
LINUX_KERNEL_HASH-6.12.29 = e8b2ec7e2338ccb9c86de7154f6edcaadfce80907493c143e85a82776bb5064d
|
||||
|
@@ -2,7 +2,7 @@
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -2224,12 +2224,8 @@ struct net_device {
|
||||
#if IS_ENABLED(CONFIG_AX25)
|
||||
void *ax25_ptr;
|
||||
struct ax25_dev __rcu *ax25_ptr;
|
||||
#endif
|
||||
-#if IS_ENABLED(CONFIG_CFG80211)
|
||||
struct wireless_dev *ieee80211_ptr;
|
||||
@@ -93,7 +93,7 @@
|
||||
error = device_add(dev);
|
||||
--- a/include/linux/pci.h
|
||||
+++ b/include/linux/pci.h
|
||||
@@ -1080,6 +1080,8 @@ enum {
|
||||
@@ -1082,6 +1082,8 @@ enum {
|
||||
#define PCI_IRQ_MSIX (1 << 2) /* Allow MSI-X interrupts */
|
||||
#define PCI_IRQ_AFFINITY (1 << 3) /* Auto-assign affinity */
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
/* These external functions are only available when PCI support is enabled */
|
||||
#ifdef CONFIG_PCI
|
||||
|
||||
@@ -1645,7 +1647,8 @@ int pci_set_vga_state(struct pci_dev *pd
|
||||
@@ -1647,7 +1649,8 @@ int pci_set_vga_state(struct pci_dev *pd
|
||||
*/
|
||||
#define PCI_IRQ_VIRTUAL (1 << 4)
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
#include <linux/dmapool.h>
|
||||
|
||||
@@ -1708,7 +1711,7 @@ pci_alloc_irq_vectors_affinity(struct pc
|
||||
@@ -1710,7 +1713,7 @@ pci_alloc_irq_vectors_affinity(struct pc
|
||||
unsigned int max_vecs, unsigned int flags,
|
||||
struct irq_affinity *aff_desc)
|
||||
{
|
||||
|
@@ -59,7 +59,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
#endif
|
||||
--- a/arch/arm/include/asm/vmlinux.lds.h
|
||||
+++ b/arch/arm/include/asm/vmlinux.lds.h
|
||||
@@ -48,7 +48,7 @@
|
||||
@@ -54,7 +54,7 @@
|
||||
#define IDMAP_TEXT \
|
||||
ALIGN_FUNCTION(); \
|
||||
__idmap_text_start = .; \
|
||||
@@ -68,7 +68,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
__idmap_text_end = .; \
|
||||
|
||||
#define ARM_DISCARD \
|
||||
@@ -108,12 +108,12 @@
|
||||
@@ -114,12 +114,12 @@
|
||||
. = ALIGN(8); \
|
||||
.ARM.unwind_idx : { \
|
||||
__start_unwind_idx = .; \
|
||||
@@ -83,7 +83,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
__stop_unwind_tab = .; \
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
@@ -149,7 +149,7 @@
|
||||
\
|
||||
__stubs_lma = .; \
|
||||
.stubs ADDR(.vectors) + 0x1000 : AT(__stubs_lma) { \
|
||||
|
@@ -1,6 +1,6 @@
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -2043,7 +2043,7 @@ config PADATA
|
||||
@@ -2051,7 +2051,7 @@ config PADATA
|
||||
bool
|
||||
|
||||
config ASN1
|
||||
|
@@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -1133,6 +1133,10 @@ config MIPS_MSC
|
||||
@@ -1132,6 +1132,10 @@ config MIPS_MSC
|
||||
config SYNC_R4K
|
||||
bool
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
--- a/block/blk.h
|
||||
+++ b/block/blk.h
|
||||
@@ -564,6 +564,8 @@ void blk_free_ext_minor(unsigned int min
|
||||
@@ -555,6 +555,8 @@ void blk_free_ext_minor(unsigned int min
|
||||
#define ADDPART_FLAG_NONE 0
|
||||
#define ADDPART_FLAG_RAID 1
|
||||
#define ADDPART_FLAG_WHOLEDISK 2
|
||||
|
@@ -22,7 +22,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/if_vlan.h>
|
||||
#include <linux/uaccess.h>
|
||||
@@ -7046,6 +7047,22 @@ static void rtl_tally_reset(struct r8152
|
||||
@@ -7047,6 +7048,22 @@ static void rtl_tally_reset(struct r8152
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
static void r8152b_init(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
@@ -7087,6 +7104,8 @@ static void r8152b_init(struct r8152 *tp
|
||||
@@ -7088,6 +7105,8 @@ static void r8152b_init(struct r8152 *tp
|
||||
ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
|
||||
ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
|
||||
ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
|
||||
@@ -54,7 +54,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
}
|
||||
|
||||
static void r8153_init(struct r8152 *tp)
|
||||
@@ -7227,6 +7246,8 @@ static void r8153_init(struct r8152 *tp)
|
||||
@@ -7228,6 +7247,8 @@ static void r8153_init(struct r8152 *tp)
|
||||
tp->coalesce = COALESCE_SLOW;
|
||||
break;
|
||||
}
|
||||
@@ -63,7 +63,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
}
|
||||
|
||||
static void r8153b_init(struct r8152 *tp)
|
||||
@@ -7309,6 +7330,8 @@ static void r8153b_init(struct r8152 *tp
|
||||
@@ -7310,6 +7331,8 @@ static void r8153b_init(struct r8152 *tp
|
||||
rtl_tally_reset(tp);
|
||||
|
||||
tp->coalesce = 15000; /* 15 us */
|
||||
|
@@ -78,7 +78,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
netif_napi_del(&bgmac->napi);
|
||||
--- a/drivers/net/ethernet/broadcom/bgmac.h
|
||||
+++ b/drivers/net/ethernet/broadcom/bgmac.h
|
||||
@@ -388,6 +388,7 @@
|
||||
@@ -387,6 +387,7 @@
|
||||
#define BGMAC_FEAT_CC4_IF_SW_TYPE_RGMII BIT(18)
|
||||
#define BGMAC_FEAT_CC7_IF_TYPE_RGMII BIT(19)
|
||||
#define BGMAC_FEAT_IDM_MASK BIT(20)
|
||||
@@ -86,7 +86,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
|
||||
struct bgmac_slot_info {
|
||||
union {
|
||||
@@ -495,6 +496,9 @@ struct bgmac {
|
||||
@@ -494,6 +495,9 @@ struct bgmac {
|
||||
void (*cmn_maskset32)(struct bgmac *bgmac, u16 offset, u32 mask,
|
||||
u32 set);
|
||||
int (*phy_connect)(struct bgmac *bgmac);
|
||||
|
@@ -19,7 +19,7 @@
|
||||
|
||||
#define QUECTEL_VENDOR_ID 0x2c7c
|
||||
/* These Quectel products use Quectel's vendor ID */
|
||||
@@ -1201,6 +1203,11 @@ static const struct usb_device_id option
|
||||
@@ -1195,6 +1197,11 @@ static const struct usb_device_id option
|
||||
.driver_info = ZLP },
|
||||
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
|
||||
.driver_info = RSVD(4) },
|
||||
|
@@ -13,7 +13,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
--- a/drivers/net/usb/rndis_host.c
|
||||
+++ b/drivers/net/usb/rndis_host.c
|
||||
@@ -640,6 +640,16 @@ static const struct driver_info zte_rndi
|
||||
@@ -630,6 +630,16 @@ static const struct driver_info zte_rndi
|
||||
.tx_fixup = rndis_tx_fixup,
|
||||
};
|
||||
|
||||
@@ -30,11 +30,10 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
static const struct usb_device_id products [] = {
|
||||
@@ -675,6 +685,36 @@ static const struct usb_device_id produc
|
||||
/* RNDIS for tethering */
|
||||
@@ -666,6 +676,36 @@ static const struct usb_device_id produc
|
||||
USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
||||
.driver_info = (unsigned long) &rndis_info,
|
||||
+}, {
|
||||
}, {
|
||||
+ /* Quectel EG060V rndis device */
|
||||
+ USB_DEVICE_AND_INTERFACE_INFO(0x2c7c, 0x6004,
|
||||
+ USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
||||
@@ -64,6 +63,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
+ USB_DEVICE_AND_INTERFACE_INFO(0x2dee, 0x4d49,
|
||||
+ USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
||||
+ .driver_info = (unsigned long) &asr_rndis_info,
|
||||
}, {
|
||||
/* Mobile Broadband Modem, seen in Novatel Verizon USB730L and
|
||||
* Telit FN990A (RNDIS)
|
||||
+}, {
|
||||
/* Novatel Verizon USB730L */
|
||||
USB_INTERFACE_INFO(USB_CLASS_MISC, 4, 1),
|
||||
.driver_info = (unsigned long) &rndis_info,
|
||||
|
@@ -15,7 +15,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
#include "gpiolib.h"
|
||||
#include "gpiolib-of.h"
|
||||
@@ -1187,3 +1189,73 @@ void of_gpiochip_remove(struct gpio_chip
|
||||
@@ -1189,3 +1191,73 @@ void of_gpiochip_remove(struct gpio_chip
|
||||
{
|
||||
of_node_put(dev_of_node(&chip->gpiodev->dev));
|
||||
}
|
||||
|
@@ -319,7 +319,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -4229,6 +4229,8 @@ static __net_initdata struct pernet_oper
|
||||
@@ -4237,6 +4237,8 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
static int __init proto_init(void)
|
||||
{
|
||||
|
@@ -73,7 +73,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+MODULE_LICENSE("GPL");
|
||||
--- a/kernel/sched/core.c
|
||||
+++ b/kernel/sched/core.c
|
||||
@@ -4419,6 +4419,7 @@ int wake_up_state(struct task_struct *p,
|
||||
@@ -4422,6 +4422,7 @@ int wake_up_state(struct task_struct *p,
|
||||
{
|
||||
return try_to_wake_up(p, state, 0);
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/of/fdt.c
|
||||
+++ b/drivers/of/fdt.c
|
||||
@@ -1052,6 +1052,9 @@ int __init early_init_dt_scan_chosen(cha
|
||||
@@ -1049,6 +1049,9 @@ int __init early_init_dt_scan_chosen(cha
|
||||
p = of_get_flat_dt_prop(node, "bootargs", &l);
|
||||
if (p != NULL && l > 0)
|
||||
strscpy(cmdline, p, min(l, COMMAND_LINE_SIZE));
|
||||
|
@@ -123,7 +123,7 @@ Signed-off-by: Zhi Chen <zhichen@codeaurora.org>
|
||||
depends on NETFILTER_ADVANCED
|
||||
--- a/net/netfilter/nf_conntrack_core.c
|
||||
+++ b/net/netfilter/nf_conntrack_core.c
|
||||
@@ -2750,6 +2750,10 @@ int nf_conntrack_init_net(struct net *ne
|
||||
@@ -2753,6 +2753,10 @@ int nf_conntrack_init_net(struct net *ne
|
||||
nf_conntrack_ecache_pernet_init(net);
|
||||
nf_conntrack_proto_pernet_init(net);
|
||||
|
||||
|
@@ -78,7 +78,7 @@
|
||||
struct net_bridge_port *p;
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -3579,9 +3579,17 @@ static int xmit_one(struct sk_buff *skb,
|
||||
@@ -3642,9 +3642,17 @@ static int xmit_one(struct sk_buff *skb,
|
||||
{
|
||||
unsigned int len;
|
||||
int rc;
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
len = skb->len;
|
||||
trace_net_dev_start_xmit(skb, dev);
|
||||
@@ -5417,6 +5425,11 @@ void netdev_rx_handler_unregister(struct
|
||||
@@ -5488,6 +5496,11 @@ void netdev_rx_handler_unregister(struct
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister);
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
/*
|
||||
* Limit the use of PFMEMALLOC reserves to those protocols that implement
|
||||
* the special handling of PFMEMALLOC skbs.
|
||||
@@ -5465,6 +5478,10 @@ static int __netif_receive_skb_core(stru
|
||||
@@ -5536,6 +5549,10 @@ static int __netif_receive_skb_core(stru
|
||||
int ret = NET_RX_DROP;
|
||||
__be16 type;
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
net_timestamp_check(!READ_ONCE(net_hotdata.tstamp_prequeue), skb);
|
||||
|
||||
trace_netif_receive_skb(skb);
|
||||
@@ -5503,6 +5520,15 @@ another_round:
|
||||
@@ -5574,6 +5591,15 @@ another_round:
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@@ -88,7 +88,7 @@ This reverts commit bffcc6882a1bb2be8c9420184966f4c2c822078e.
|
||||
genl_info_net_set(&info, net);
|
||||
--- a/net/openvswitch/conntrack.c
|
||||
+++ b/net/openvswitch/conntrack.c
|
||||
@@ -1642,7 +1642,7 @@ static struct sk_buff *
|
||||
@@ -1637,7 +1637,7 @@ static struct sk_buff *
|
||||
ovs_ct_limit_cmd_reply_start(struct genl_info *info, u8 cmd,
|
||||
struct ovs_header **ovs_reply_header)
|
||||
{
|
||||
@@ -183,7 +183,7 @@ This reverts commit bffcc6882a1bb2be8c9420184966f4c2c822078e.
|
||||
if (IS_ERR(dp)) {
|
||||
err = PTR_ERR(dp);
|
||||
goto err_unlock_free;
|
||||
@@ -2248,7 +2245,7 @@ static void ovs_update_headroom(struct d
|
||||
@@ -2254,7 +2251,7 @@ static void ovs_update_headroom(struct d
|
||||
static int ovs_vport_cmd_new(struct sk_buff *skb, struct genl_info *info)
|
||||
{
|
||||
struct nlattr **a = info->attrs;
|
||||
@@ -192,7 +192,7 @@ This reverts commit bffcc6882a1bb2be8c9420184966f4c2c822078e.
|
||||
struct vport_parms parms;
|
||||
struct sk_buff *reply;
|
||||
struct vport *vport;
|
||||
@@ -2350,7 +2347,7 @@ static int ovs_vport_cmd_set(struct sk_b
|
||||
@@ -2356,7 +2353,7 @@ static int ovs_vport_cmd_set(struct sk_b
|
||||
return -ENOMEM;
|
||||
|
||||
ovs_lock();
|
||||
@@ -201,7 +201,7 @@ This reverts commit bffcc6882a1bb2be8c9420184966f4c2c822078e.
|
||||
err = PTR_ERR(vport);
|
||||
if (IS_ERR(vport))
|
||||
goto exit_unlock_free;
|
||||
@@ -2406,7 +2403,7 @@ static int ovs_vport_cmd_del(struct sk_b
|
||||
@@ -2412,7 +2409,7 @@ static int ovs_vport_cmd_del(struct sk_b
|
||||
return -ENOMEM;
|
||||
|
||||
ovs_lock();
|
||||
@@ -210,7 +210,7 @@ This reverts commit bffcc6882a1bb2be8c9420184966f4c2c822078e.
|
||||
err = PTR_ERR(vport);
|
||||
if (IS_ERR(vport))
|
||||
goto exit_unlock_free;
|
||||
@@ -2449,7 +2446,7 @@ exit_unlock_free:
|
||||
@@ -2455,7 +2452,7 @@ exit_unlock_free:
|
||||
static int ovs_vport_cmd_get(struct sk_buff *skb, struct genl_info *info)
|
||||
{
|
||||
struct nlattr **a = info->attrs;
|
||||
|
@@ -44,7 +44,7 @@
|
||||
#endif /* _LINUX_U64_STATS_SYNC_H */
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -2996,6 +2996,8 @@ int call_netdevice_notifiers(unsigned lo
|
||||
@@ -3002,6 +3002,8 @@ int call_netdevice_notifiers(unsigned lo
|
||||
int call_netdevice_notifiers_info(unsigned long val,
|
||||
struct netdev_notifier_info *info);
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
dev_base_seq_inc(dev_net(dev));
|
||||
}
|
||||
@@ -758,9 +784,9 @@ EXPORT_SYMBOL_GPL(dev_fill_forward_path)
|
||||
@@ -788,9 +814,9 @@ struct napi_struct *netdev_napi_by_id(st
|
||||
* @net: the applicable net namespace
|
||||
* @name: name to find
|
||||
*
|
||||
@@ -122,7 +122,7 @@
|
||||
* reference counters are not incremented so the caller must be
|
||||
* careful with locks.
|
||||
*/
|
||||
@@ -841,7 +867,8 @@ EXPORT_SYMBOL(netdev_get_by_name);
|
||||
@@ -871,7 +897,8 @@ EXPORT_SYMBOL(netdev_get_by_name);
|
||||
* Search for an interface by index. Returns %NULL if the device
|
||||
* is not found or a pointer to the device. The device has not
|
||||
* had its reference counter increased so the caller must be careful
|
||||
@@ -132,7 +132,7 @@
|
||||
*/
|
||||
|
||||
struct net_device *__dev_get_by_index(struct net *net, int ifindex)
|
||||
@@ -1259,11 +1286,15 @@ rollback:
|
||||
@@ -1322,11 +1349,15 @@ rollback:
|
||||
|
||||
netdev_adjacent_rename_links(dev, oldname);
|
||||
|
||||
|
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/linux/compiler.h
|
||||
+++ b/include/linux/compiler.h
|
||||
@@ -214,6 +214,8 @@ void ftrace_likely_update(struct ftrace_
|
||||
@@ -191,6 +191,8 @@ void ftrace_likely_update(struct ftrace_
|
||||
__v; \
|
||||
})
|
||||
|
||||
@@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/**
|
||||
@@ -329,6 +331,4 @@ static inline void *offset_to_ptr(const
|
||||
@@ -306,6 +308,4 @@ static inline void *offset_to_ptr(const
|
||||
*/
|
||||
#define prevent_tail_call_optimization() mb()
|
||||
|
||||
|
@@ -19,7 +19,7 @@ Acked-by: Rob Landley <rob@landley.net>
|
||||
config CEVT_BCM1480
|
||||
bool
|
||||
|
||||
@@ -2991,6 +2988,18 @@ choice
|
||||
@@ -2990,6 +2987,18 @@ choice
|
||||
bool "Extend builtin kernel arguments with bootloader arguments"
|
||||
endchoice
|
||||
|
||||
|
@@ -22,7 +22,7 @@ Link: https://bugzilla.kernel.org/show_bug.cgi?id=109581
|
||||
|
||||
--- a/net/sched/sch_codel.c
|
||||
+++ b/net/sched/sch_codel.c
|
||||
@@ -95,8 +95,17 @@ static struct sk_buff *codel_qdisc_deque
|
||||
@@ -65,8 +65,17 @@ static struct sk_buff *codel_qdisc_deque
|
||||
&q->stats, qdisc_pkt_len, codel_get_enqueue_time,
|
||||
drop_func, dequeue_func);
|
||||
|
||||
|
@@ -157,7 +157,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
case RTN_THROW:
|
||||
case RTN_UNREACHABLE:
|
||||
default:
|
||||
@@ -4597,6 +4616,17 @@ static int ip6_pkt_prohibit_out(struct n
|
||||
@@ -4598,6 +4617,17 @@ static int ip6_pkt_prohibit_out(struct n
|
||||
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
/*
|
||||
* Allocate a dst for local (unicast / anycast) address.
|
||||
*/
|
||||
@@ -5088,7 +5118,8 @@ static int rtm_to_fib6_config(struct sk_
|
||||
@@ -5089,7 +5119,8 @@ static int rtm_to_fib6_config(struct sk_
|
||||
if (rtm->rtm_type == RTN_UNREACHABLE ||
|
||||
rtm->rtm_type == RTN_BLACKHOLE ||
|
||||
rtm->rtm_type == RTN_PROHIBIT ||
|
||||
@@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
cfg->fc_flags |= RTF_REJECT;
|
||||
|
||||
if (rtm->rtm_type == RTN_LOCAL)
|
||||
@@ -6348,6 +6379,8 @@ static int ip6_route_dev_notify(struct n
|
||||
@@ -6349,6 +6380,8 @@ static int ip6_route_dev_notify(struct n
|
||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
||||
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
||||
@@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
||||
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
||||
#endif
|
||||
@@ -6359,6 +6392,7 @@ static int ip6_route_dev_notify(struct n
|
||||
@@ -6360,6 +6393,7 @@ static int ip6_route_dev_notify(struct n
|
||||
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
|
||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
|
||||
@@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
|
||||
#endif
|
||||
}
|
||||
@@ -6554,6 +6588,8 @@ static int __net_init ip6_route_net_init
|
||||
@@ -6555,6 +6589,8 @@ static int __net_init ip6_route_net_init
|
||||
|
||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||
net->ipv6.fib6_has_custom_rules = false;
|
||||
@@ -211,7 +211,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
|
||||
sizeof(*net->ipv6.ip6_prohibit_entry),
|
||||
GFP_KERNEL);
|
||||
@@ -6564,11 +6600,21 @@ static int __net_init ip6_route_net_init
|
||||
@@ -6565,11 +6601,21 @@ static int __net_init ip6_route_net_init
|
||||
ip6_template_metrics, true);
|
||||
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->dst.rt_uncached);
|
||||
|
||||
@@ -234,7 +234,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
||||
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
||||
ip6_template_metrics, true);
|
||||
@@ -6595,6 +6641,8 @@ out:
|
||||
@@ -6596,6 +6642,8 @@ out:
|
||||
return ret;
|
||||
|
||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||
@@ -243,7 +243,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
out_ip6_prohibit_entry:
|
||||
kfree(net->ipv6.ip6_prohibit_entry);
|
||||
out_ip6_null_entry:
|
||||
@@ -6614,6 +6662,7 @@ static void __net_exit ip6_route_net_exi
|
||||
@@ -6615,6 +6663,7 @@ static void __net_exit ip6_route_net_exi
|
||||
kfree(net->ipv6.ip6_null_entry);
|
||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||
kfree(net->ipv6.ip6_prohibit_entry);
|
||||
@@ -251,7 +251,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||
kfree(net->ipv6.ip6_blk_hole_entry);
|
||||
#endif
|
||||
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
||||
@@ -6697,6 +6746,9 @@ void __init ip6_route_init_special_entri
|
||||
@@ -6698,6 +6747,9 @@ void __init ip6_route_init_special_entri
|
||||
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
||||
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||
|
@@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
|
||||
--- a/drivers/net/phy/phy_device.c
|
||||
+++ b/drivers/net/phy/phy_device.c
|
||||
@@ -1986,6 +1986,9 @@ void phy_detach(struct phy_device *phyde
|
||||
@@ -2013,6 +2013,9 @@ void phy_detach(struct phy_device *phyde
|
||||
if (phydev->devlink)
|
||||
device_link_del(phydev->devlink);
|
||||
|
||||
|
@@ -17,7 +17,7 @@ Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -7135,6 +7135,7 @@ static int mv88e6xxx_register_switch(str
|
||||
@@ -7209,6 +7209,7 @@ static int mv88e6xxx_register_switch(str
|
||||
ds->phylink_mac_ops = &mv88e6xxx_phylink_mac_ops;
|
||||
ds->ageing_time_min = chip->info->age_time_coeff;
|
||||
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
||||
|
@@ -13,7 +13,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1868,6 +1868,15 @@ config ARCH_HAS_MEMBARRIER_CALLBACKS
|
||||
@@ -1876,6 +1876,15 @@ config ARCH_HAS_MEMBARRIER_CALLBACKS
|
||||
config ARCH_HAS_MEMBARRIER_SYNC_CORE
|
||||
bool
|
||||
|
||||
|
@@ -4,11 +4,9 @@ Signed-off-by: Michael Riesch <michael.riesch@wolfvision.net>
|
||||
drivers/clk/rockchip/clk-rk3568.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/clk/rockchip/clk-rk3568.c b/drivers/clk/rockchip/clk-rk3568.c
|
||||
index 53d10b1c627b..7d9279291e76 100644
|
||||
--- a/drivers/clk/rockchip/clk-rk3568.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3568.c
|
||||
@@ -1602,6 +1602,7 @@ static const char *const rk3568_cru_critical_clocks[] __initconst = {
|
||||
@@ -1602,6 +1602,7 @@ static const char *const rk3568_cru_crit
|
||||
"pclk_php",
|
||||
"hclk_usb",
|
||||
"pclk_usb",
|
||||
@@ -16,5 +14,3 @@ index 53d10b1c627b..7d9279291e76 100644
|
||||
"hclk_vo",
|
||||
};
|
||||
|
||||
|
||||
---
|
||||
|
@@ -16,7 +16,7 @@ Signed-off-by: Vinod Koul <vkoul@kernel.org>
|
||||
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
|
||||
@@ -1538,6 +1538,43 @@ static const char * const rk_udphy_rst_l
|
||||
@@ -1537,6 +1537,43 @@ static const char * const rk_udphy_rst_l
|
||||
"init", "cmn", "lane", "pcs_apb", "pma_apb"
|
||||
};
|
||||
|
||||
@@ -60,7 +60,7 @@ Signed-off-by: Vinod Koul <vkoul@kernel.org>
|
||||
static const struct rk_udphy_cfg rk3588_udphy_cfgs = {
|
||||
.num_phys = 2,
|
||||
.phy_ids = {
|
||||
@@ -1585,6 +1622,10 @@ static const struct rk_udphy_cfg rk3588_
|
||||
@@ -1584,6 +1621,10 @@ static const struct rk_udphy_cfg rk3588_
|
||||
|
||||
static const struct of_device_id rk_udphy_dt_match[] = {
|
||||
{
|
||||
|
@@ -18,7 +18,7 @@
|
||||
rockchip,grf = <&grf>;
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
|
||||
@@ -417,6 +417,12 @@
|
||||
@@ -422,6 +422,12 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@@ -95,7 +95,7 @@ v1:
|
||||
struct combphy_reg pipe_clk_25m;
|
||||
struct combphy_reg pipe_clk_100m;
|
||||
struct combphy_reg pipe_phymode_sel;
|
||||
@@ -584,6 +599,266 @@ static const struct rockchip_combphy_cfg
|
||||
@@ -587,6 +602,266 @@ static const struct rockchip_combphy_cfg
|
||||
.combphy_cfg = rk3568_combphy_cfg,
|
||||
};
|
||||
|
||||
@@ -362,7 +362,7 @@ v1:
|
||||
static int rk3588_combphy_cfg(struct rockchip_combphy_priv *priv)
|
||||
{
|
||||
const struct rockchip_combphy_grfcfg *cfg = priv->cfg->grfcfg;
|
||||
@@ -776,6 +1051,10 @@ static const struct of_device_id rockchi
|
||||
@@ -779,6 +1054,10 @@ static const struct of_device_id rockchi
|
||||
.data = &rk3568_combphy_cfgs,
|
||||
},
|
||||
{
|
||||
|
@@ -62,7 +62,7 @@ Change-Id: Ib5bbb81615fe9fab80f26cdd2098cfb56746ca15
|
||||
#define RK3568_GRF_TSADC_CON 0x0600
|
||||
#define RK3568_GRF_TSADC_ANA_REG0 (0x10001 << 0)
|
||||
#define RK3568_GRF_TSADC_ANA_REG1 (0x10001 << 1)
|
||||
@@ -497,6 +508,45 @@ static const struct tsadc_table rk3399_c
|
||||
@@ -498,6 +509,45 @@ static const struct tsadc_table rk3399_c
|
||||
{TSADCV3_DATA_MASK, 125000},
|
||||
};
|
||||
|
||||
@@ -108,7 +108,7 @@ Change-Id: Ib5bbb81615fe9fab80f26cdd2098cfb56746ca15
|
||||
static const struct tsadc_table rk3568_code_table[] = {
|
||||
{0, -40000},
|
||||
{1584, -40000},
|
||||
@@ -834,6 +884,37 @@ static void rk_tsadcv8_initialize(struct
|
||||
@@ -835,6 +885,37 @@ static void rk_tsadcv8_initialize(struct
|
||||
regs + TSADCV2_AUTO_CON);
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ Change-Id: Ib5bbb81615fe9fab80f26cdd2098cfb56746ca15
|
||||
static void rk_tsadcv2_irq_ack(void __iomem *regs)
|
||||
{
|
||||
u32 val;
|
||||
@@ -1258,6 +1339,31 @@ static const struct rockchip_tsadc_chip
|
||||
@@ -1259,6 +1340,31 @@ static const struct rockchip_tsadc_chip
|
||||
},
|
||||
};
|
||||
|
||||
@@ -178,7 +178,7 @@ Change-Id: Ib5bbb81615fe9fab80f26cdd2098cfb56746ca15
|
||||
static const struct rockchip_tsadc_chip rk3568_tsadc_data = {
|
||||
/* cpu, gpu */
|
||||
.chn_offset = 0,
|
||||
@@ -1338,6 +1444,10 @@ static const struct of_device_id of_rock
|
||||
@@ -1339,6 +1445,10 @@ static const struct of_device_id of_rock
|
||||
.data = (void *)&rk3399_tsadc_data,
|
||||
},
|
||||
{
|
||||
|
@@ -36,7 +36,7 @@ Signed-off-by: Jianwei Zheng <jianwei.zheng@rock-chips.com>
|
||||
struct combphy_reg sgmii_mode_set;
|
||||
struct combphy_reg qsgmii_mode_set;
|
||||
struct combphy_reg pipe_rxterm_set;
|
||||
@@ -393,6 +394,120 @@ static int rockchip_combphy_probe(struct
|
||||
@@ -396,6 +397,120 @@ static int rockchip_combphy_probe(struct
|
||||
return PTR_ERR_OR_ZERO(phy_provider);
|
||||
}
|
||||
|
||||
@@ -157,7 +157,7 @@ Signed-off-by: Jianwei Zheng <jianwei.zheng@rock-chips.com>
|
||||
static int rk3568_combphy_cfg(struct rockchip_combphy_priv *priv)
|
||||
{
|
||||
const struct rockchip_combphy_grfcfg *cfg = priv->cfg->grfcfg;
|
||||
@@ -1047,6 +1162,10 @@ static const struct rockchip_combphy_cfg
|
||||
@@ -1050,6 +1165,10 @@ static const struct rockchip_combphy_cfg
|
||||
|
||||
static const struct of_device_id rockchip_combphy_of_match[] = {
|
||||
{
|
||||
|
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c
|
||||
+++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c
|
||||
@@ -521,9 +521,13 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
|
||||
@@ -521,9 +521,13 @@ static int rockchip_pcie_probe(struct pl
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@@ -23,9 +23,6 @@ Changes in v2:
|
||||
1 file changed, 105 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/ufs/rockchip,rk3576-ufshc.yaml
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/ufs/rockchip,rk3576-ufshc.yaml b/Documentation/devicetree/bindings/ufs/rockchip,rk3576-ufshc.yaml
|
||||
new file mode 100644
|
||||
index 0000000..7d6c038
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/ufs/rockchip,rk3576-ufshc.yaml
|
||||
@@ -0,0 +1,105 @@
|
||||
@@ -134,5 +131,3 @@ index 0000000..7d6c038
|
||||
+ reset-gpios = <&gpio4 RK_PD0 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
--
|
||||
2.7.4
|
||||
|
@@ -13,8 +13,6 @@ Changes in v2: None
|
||||
include/soc/rockchip/rockchip_sip.h | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/include/soc/rockchip/rockchip_sip.h b/include/soc/rockchip/rockchip_sip.h
|
||||
index c46a9ae..501ad1f 100644
|
||||
--- a/include/soc/rockchip/rockchip_sip.h
|
||||
+++ b/include/soc/rockchip/rockchip_sip.h
|
||||
@@ -6,6 +6,9 @@
|
||||
@@ -27,5 +25,3 @@ index c46a9ae..501ad1f 100644
|
||||
#define ROCKCHIP_SIP_DRAM_FREQ 0x82000008
|
||||
#define ROCKCHIP_SIP_CONFIG_DRAM_INIT 0x00
|
||||
#define ROCKCHIP_SIP_CONFIG_DRAM_SET_RATE 0x01
|
||||
--
|
||||
2.7.4
|
||||
|
@@ -22,11 +22,9 @@ Changes in v2: None
|
||||
include/linux/pm_domain.h | 7 +++++++
|
||||
2 files changed, 41 insertions(+)
|
||||
|
||||
diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
|
||||
index 5ede0f7..2ccfcb7 100644
|
||||
--- a/drivers/pmdomain/core.c
|
||||
+++ b/drivers/pmdomain/core.c
|
||||
@@ -692,6 +692,36 @@ bool dev_pm_genpd_get_hwmode(struct device *dev)
|
||||
@@ -697,6 +697,36 @@ bool dev_pm_genpd_get_hwmode(struct devi
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dev_pm_genpd_get_hwmode);
|
||||
|
||||
@@ -63,7 +61,7 @@ index 5ede0f7..2ccfcb7 100644
|
||||
static int _genpd_power_on(struct generic_pm_domain *genpd, bool timed)
|
||||
{
|
||||
unsigned int state_idx = genpd->state_idx;
|
||||
@@ -863,6 +893,10 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on,
|
||||
@@ -868,6 +898,10 @@ static int genpd_power_off(struct generi
|
||||
if (!pm_runtime_suspended(pdd->dev) ||
|
||||
irq_safe_dev_in_sleep_domain(pdd->dev, genpd))
|
||||
not_suspended++;
|
||||
@@ -74,11 +72,9 @@ index 5ede0f7..2ccfcb7 100644
|
||||
}
|
||||
|
||||
if (not_suspended > 1 || (not_suspended == 1 && !one_dev_on))
|
||||
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
|
||||
index b637ec1..30186ad 100644
|
||||
--- a/include/linux/pm_domain.h
|
||||
+++ b/include/linux/pm_domain.h
|
||||
@@ -245,6 +245,7 @@ struct generic_pm_domain_data {
|
||||
@@ -251,6 +251,7 @@ struct generic_pm_domain_data {
|
||||
unsigned int default_pstate;
|
||||
unsigned int rpm_pstate;
|
||||
bool hw_mode;
|
||||
@@ -86,7 +82,7 @@ index b637ec1..30186ad 100644
|
||||
void *data;
|
||||
};
|
||||
|
||||
@@ -277,6 +278,7 @@ ktime_t dev_pm_genpd_get_next_hrtimer(struct device *dev);
|
||||
@@ -283,6 +284,7 @@ ktime_t dev_pm_genpd_get_next_hrtimer(st
|
||||
void dev_pm_genpd_synced_poweroff(struct device *dev);
|
||||
int dev_pm_genpd_set_hwmode(struct device *dev, bool enable);
|
||||
bool dev_pm_genpd_get_hwmode(struct device *dev);
|
||||
@@ -94,7 +90,7 @@ index b637ec1..30186ad 100644
|
||||
|
||||
extern struct dev_power_governor simple_qos_governor;
|
||||
extern struct dev_power_governor pm_domain_always_on_gov;
|
||||
@@ -360,6 +362,11 @@ static inline bool dev_pm_genpd_get_hwmode(struct device *dev)
|
||||
@@ -366,6 +368,11 @@ static inline bool dev_pm_genpd_get_hwmo
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -106,5 +102,3 @@ index b637ec1..30186ad 100644
|
||||
#define simple_qos_governor (*(struct dev_power_governor *)(NULL))
|
||||
#define pm_domain_always_on_gov (*(struct dev_power_governor *)(NULL))
|
||||
#endif
|
||||
--
|
||||
2.7.4
|
||||
|
@@ -14,8 +14,6 @@ Changes in v2: None
|
||||
drivers/pmdomain/rockchip/pm-domains.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/pmdomain/rockchip/pm-domains.c b/drivers/pmdomain/rockchip/pm-domains.c
|
||||
index cb0f938..49842f1 100644
|
||||
--- a/drivers/pmdomain/rockchip/pm-domains.c
|
||||
+++ b/drivers/pmdomain/rockchip/pm-domains.c
|
||||
@@ -5,6 +5,7 @@
|
||||
@@ -34,7 +32,7 @@ index cb0f938..49842f1 100644
|
||||
#include <dt-bindings/power/px30-power.h>
|
||||
#include <dt-bindings/power/rockchip,rv1126-power.h>
|
||||
#include <dt-bindings/power/rk3036-power.h>
|
||||
@@ -540,6 +542,7 @@ static void rockchip_do_pmu_set_power_domain(struct rockchip_pm_domain *pd,
|
||||
@@ -559,6 +561,7 @@ static void rockchip_do_pmu_set_power_do
|
||||
struct generic_pm_domain *genpd = &pd->genpd;
|
||||
u32 pd_pwr_offset = pd->info->pwr_offset;
|
||||
bool is_on, is_mem_on = false;
|
||||
@@ -42,7 +40,7 @@ index cb0f938..49842f1 100644
|
||||
|
||||
if (pd->info->pwr_mask == 0)
|
||||
return;
|
||||
@@ -567,6 +570,11 @@ static void rockchip_do_pmu_set_power_domain(struct rockchip_pm_domain *pd,
|
||||
@@ -586,6 +589,11 @@ static void rockchip_do_pmu_set_power_do
|
||||
genpd->name, is_on);
|
||||
return;
|
||||
}
|
||||
@@ -54,5 +52,3 @@ index cb0f938..49842f1 100644
|
||||
}
|
||||
|
||||
static int rockchip_pd_power(struct rockchip_pm_domain *pd, bool power_on)
|
||||
--
|
||||
2.7.4
|
||||
|
@@ -13,11 +13,9 @@ Changes in v2: None
|
||||
include/ufs/ufshcd.h | 2 ++
|
||||
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
|
||||
index 24a32e2..9d1d56d 100644
|
||||
--- a/drivers/ufs/core/ufshcd.c
|
||||
+++ b/drivers/ufs/core/ufshcd.c
|
||||
@@ -4039,7 +4039,7 @@ static int ufshcd_dme_link_startup(struct ufs_hba *hba)
|
||||
@@ -4039,7 +4039,7 @@ static int ufshcd_dme_link_startup(struc
|
||||
*
|
||||
* Return: 0 on success, non-zero value on failure.
|
||||
*/
|
||||
@@ -26,7 +24,7 @@ index 24a32e2..9d1d56d 100644
|
||||
{
|
||||
struct uic_command uic_cmd = {
|
||||
.command = UIC_CMD_DME_RESET,
|
||||
@@ -4053,6 +4053,7 @@ static int ufshcd_dme_reset(struct ufs_hba *hba)
|
||||
@@ -4053,6 +4053,7 @@ static int ufshcd_dme_reset(struct ufs_h
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -34,7 +32,7 @@ index 24a32e2..9d1d56d 100644
|
||||
|
||||
int ufshcd_dme_configure_adapt(struct ufs_hba *hba,
|
||||
int agreed_gear,
|
||||
@@ -4078,7 +4079,7 @@ EXPORT_SYMBOL_GPL(ufshcd_dme_configure_adapt);
|
||||
@@ -4078,7 +4079,7 @@ EXPORT_SYMBOL_GPL(ufshcd_dme_configure_a
|
||||
*
|
||||
* Return: 0 on success, non-zero value on failure.
|
||||
*/
|
||||
@@ -43,7 +41,7 @@ index 24a32e2..9d1d56d 100644
|
||||
{
|
||||
struct uic_command uic_cmd = {
|
||||
.command = UIC_CMD_DME_ENABLE,
|
||||
@@ -4092,6 +4093,7 @@ static int ufshcd_dme_enable(struct ufs_hba *hba)
|
||||
@@ -4092,6 +4093,7 @@ static int ufshcd_dme_enable(struct ufs_
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -51,11 +49,9 @@ index 24a32e2..9d1d56d 100644
|
||||
|
||||
static inline void ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba)
|
||||
{
|
||||
diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
|
||||
index 3f68ae3e4..b9733dc 100644
|
||||
--- a/include/ufs/ufshcd.h
|
||||
+++ b/include/ufs/ufshcd.h
|
||||
@@ -1360,6 +1360,8 @@ extern int ufshcd_system_thaw(struct device *dev);
|
||||
@@ -1361,6 +1361,8 @@ extern int ufshcd_system_thaw(struct dev
|
||||
extern int ufshcd_system_restore(struct device *dev);
|
||||
#endif
|
||||
|
||||
@@ -64,5 +60,3 @@ index 3f68ae3e4..b9733dc 100644
|
||||
extern int ufshcd_dme_configure_adapt(struct ufs_hba *hba,
|
||||
int agreed_gear,
|
||||
int adapt_val);
|
||||
--
|
||||
2.7.4
|
||||
|
@@ -52,8 +52,6 @@ Changes in v2: None
|
||||
create mode 100644 drivers/ufs/host/ufs-rockchip.c
|
||||
create mode 100644 drivers/ufs/host/ufs-rockchip.h
|
||||
|
||||
diff --git a/drivers/ufs/host/Kconfig b/drivers/ufs/host/Kconfig
|
||||
index 580c8d0..191fbd7 100644
|
||||
--- a/drivers/ufs/host/Kconfig
|
||||
+++ b/drivers/ufs/host/Kconfig
|
||||
@@ -142,3 +142,15 @@ config SCSI_UFS_SPRD
|
||||
@@ -72,20 +70,15 @@ index 580c8d0..191fbd7 100644
|
||||
+
|
||||
+ Select this if you have UFS controller on Rockchip chipset.
|
||||
+ If unsure, say N.
|
||||
diff --git a/drivers/ufs/host/Makefile b/drivers/ufs/host/Makefile
|
||||
index 4573aea..2f97feb 100644
|
||||
--- a/drivers/ufs/host/Makefile
|
||||
+++ b/drivers/ufs/host/Makefile
|
||||
@@ -10,5 +10,6 @@ obj-$(CONFIG_SCSI_UFSHCD_PLATFORM) += ufshcd-pltfrm.o
|
||||
@@ -10,5 +10,6 @@ obj-$(CONFIG_SCSI_UFSHCD_PLATFORM) += uf
|
||||
obj-$(CONFIG_SCSI_UFS_HISI) += ufs-hisi.o
|
||||
obj-$(CONFIG_SCSI_UFS_MEDIATEK) += ufs-mediatek.o
|
||||
obj-$(CONFIG_SCSI_UFS_RENESAS) += ufs-renesas.o
|
||||
+obj-$(CONFIG_SCSI_UFS_ROCKCHIP) += ufs-rockchip.o
|
||||
obj-$(CONFIG_SCSI_UFS_SPRD) += ufs-sprd.o
|
||||
obj-$(CONFIG_SCSI_UFS_TI_J721E) += ti-j721e-ufs.o
|
||||
diff --git a/drivers/ufs/host/ufs-rockchip.c b/drivers/ufs/host/ufs-rockchip.c
|
||||
new file mode 100644
|
||||
index 0000000..b087ce0
|
||||
--- /dev/null
|
||||
+++ b/drivers/ufs/host/ufs-rockchip.c
|
||||
@@ -0,0 +1,368 @@
|
||||
@@ -457,9 +450,6 @@ index 0000000..b087ce0
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_DESCRIPTION("Rockchip UFS Host Driver");
|
||||
diff --git a/drivers/ufs/host/ufs-rockchip.h b/drivers/ufs/host/ufs-rockchip.h
|
||||
new file mode 100644
|
||||
index 0000000..768dbe3
|
||||
--- /dev/null
|
||||
+++ b/drivers/ufs/host/ufs-rockchip.h
|
||||
@@ -0,0 +1,48 @@
|
||||
@@ -511,5 +501,3 @@ index 0000000..768dbe3
|
||||
+ (reg))
|
||||
+
|
||||
+#endif /* _UFS_ROCKCHIP_H_ */
|
||||
--
|
||||
2.7.4
|
||||
|
@@ -12,8 +12,6 @@ Changes in v2: None
|
||||
arch/arm64/boot/dts/rockchip/rk3576.dtsi | 25 +++++++++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
|
||||
index 436232f..32beda2 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
|
||||
@@ -1110,6 +1110,30 @@
|
||||
@@ -47,5 +45,3 @@ index 436232f..32beda2 100644
|
||||
sdmmc: mmc@2a310000 {
|
||||
compatible = "rockchip,rk3576-dw-mshc";
|
||||
reg = <0x0 0x2a310000 0x0 0x4000>;
|
||||
--
|
||||
2.7.4
|
||||
|
@@ -6,11 +6,9 @@ Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
drivers/clk/rockchip/clk-rk3576.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/clk/rockchip/clk-rk3576.c b/drivers/clk/rockchip/clk-rk3576.c
|
||||
index 595e010341f7..029939a98416 100644
|
||||
--- a/drivers/clk/rockchip/clk-rk3576.c
|
||||
+++ b/drivers/clk/rockchip/clk-rk3576.c
|
||||
@@ -541,6 +541,8 @@ static struct rockchip_clk_branch rk3576_clk_branches[] __initdata = {
|
||||
@@ -541,6 +541,8 @@ static struct rockchip_clk_branch rk3576
|
||||
RK3576_CLKGATE_CON(5), 14, GFLAGS),
|
||||
GATE(CLK_OTPC_AUTO_RD_G, "clk_otpc_auto_rd_g", "xin24m", 0,
|
||||
RK3576_CLKGATE_CON(5), 15, GFLAGS),
|
||||
@@ -19,5 +17,3 @@ index 595e010341f7..029939a98416 100644
|
||||
COMPOSITE(CLK_MIPI_CAMERAOUT_M0, "clk_mipi_cameraout_m0", mux_24m_spll_gpll_cpll_p, 0,
|
||||
RK3576_CLKSEL_CON(38), 8, 2, MFLAGS, 0, 8, DFLAGS,
|
||||
RK3576_CLKGATE_CON(6), 3, GFLAGS),
|
||||
--
|
||||
2.45.2
|
||||
|
@@ -11,8 +11,6 @@ Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
drivers/nvmem/rockchip-otp.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/nvmem/rockchip-otp.c b/drivers/nvmem/rockchip-otp.c
|
||||
index ebc3f0b24166..3edfbfc2d722 100644
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -59,7 +59,6 @@
|
||||
@@ -31,7 +29,7 @@ index ebc3f0b24166..3edfbfc2d722 100644
|
||||
const char * const *clks;
|
||||
int num_clks;
|
||||
nvmem_reg_read_t reg_read;
|
||||
@@ -196,7 +196,7 @@ static int rk3588_otp_read(void *context, unsigned int offset,
|
||||
@@ -196,7 +196,7 @@ static int rk3588_otp_read(void *context
|
||||
addr_start = round_down(offset, RK3588_NBYTES) / RK3588_NBYTES;
|
||||
addr_end = round_up(offset + bytes, RK3588_NBYTES) / RK3588_NBYTES;
|
||||
addr_len = addr_end - addr_start;
|
||||
@@ -40,7 +38,7 @@ index ebc3f0b24166..3edfbfc2d722 100644
|
||||
|
||||
buf = kzalloc(array_size(addr_len, RK3588_NBYTES), GFP_KERNEL);
|
||||
if (!buf)
|
||||
@@ -280,6 +280,7 @@ static const char * const rk3588_otp_clocks[] = {
|
||||
@@ -280,6 +280,7 @@ static const char * const rk3588_otp_clo
|
||||
|
||||
static const struct rockchip_data rk3588_data = {
|
||||
.size = 0x400,
|
||||
@@ -48,5 +46,3 @@ index ebc3f0b24166..3edfbfc2d722 100644
|
||||
.clks = rk3588_otp_clocks,
|
||||
.num_clks = ARRAY_SIZE(rk3588_otp_clocks),
|
||||
.reg_read = rk3588_otp_read,
|
||||
--
|
||||
2.45.2
|
||||
|
@@ -9,8 +9,6 @@ Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
.../bindings/nvmem/rockchip,otp.yaml | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml b/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
|
||||
index a44d44b32809..dae7543a0179 100644
|
||||
--- a/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
|
||||
+++ b/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
|
||||
@@ -14,6 +14,7 @@ properties:
|
||||
@@ -21,12 +19,10 @@ index a44d44b32809..dae7543a0179 100644
|
||||
- rockchip,rk3588-otp
|
||||
|
||||
reg:
|
||||
@@ -68,6 +69,23 @@ allOf:
|
||||
items:
|
||||
- const: phy
|
||||
@@ -70,6 +71,23 @@ allOf:
|
||||
|
||||
+ - if:
|
||||
+ properties:
|
||||
- if:
|
||||
properties:
|
||||
+ compatible:
|
||||
+ contains:
|
||||
+ enum:
|
||||
@@ -42,8 +38,8 @@ index a44d44b32809..dae7543a0179 100644
|
||||
+ - const: otp
|
||||
+ - const: apb
|
||||
+
|
||||
- if:
|
||||
properties:
|
||||
+ - if:
|
||||
+ properties:
|
||||
compatible:
|
||||
--
|
||||
2.45.2
|
||||
contains:
|
||||
enum:
|
||||
|
@@ -6,11 +6,9 @@ Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
drivers/nvmem/rockchip-otp.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/drivers/nvmem/rockchip-otp.c b/drivers/nvmem/rockchip-otp.c
|
||||
index 3edfbfc2d722..d88f12c53242 100644
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -274,6 +274,14 @@ static const struct rockchip_data px30_data = {
|
||||
@@ -274,6 +274,14 @@ static const struct rockchip_data px30_d
|
||||
.reg_read = px30_otp_read,
|
||||
};
|
||||
|
||||
@@ -25,16 +23,14 @@ index 3edfbfc2d722..d88f12c53242 100644
|
||||
static const char * const rk3588_otp_clocks[] = {
|
||||
"otp", "apb_pclk", "phy", "arb",
|
||||
};
|
||||
@@ -295,6 +303,10 @@ static const struct of_device_id rockchip_otp_match[] = {
|
||||
.compatible = "rockchip,rk3308-otp",
|
||||
@@ -296,6 +304,10 @@ static const struct of_device_id rockchi
|
||||
.data = &px30_data,
|
||||
},
|
||||
+ {
|
||||
{
|
||||
+ .compatible = "rockchip,rk3576-otp",
|
||||
+ .data = &rk3576_data,
|
||||
+ },
|
||||
{
|
||||
+ {
|
||||
.compatible = "rockchip,rk3588-otp",
|
||||
.data = &rk3588_data,
|
||||
--
|
||||
2.45.2
|
||||
},
|
||||
|
@@ -6,11 +6,9 @@ Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
arch/arm64/boot/dts/rockchip/rk3576.dtsi | 39 ++++++++++++++++++++++++
|
||||
1 file changed, 39 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
|
||||
index 436232ffe4d1..c70c9dcfad82 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
|
||||
@@ -1149,6 +1149,45 @@ sdhci: mmc@2a330000 {
|
||||
@@ -1173,6 +1173,45 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -56,5 +54,3 @@ index 436232ffe4d1..c70c9dcfad82 100644
|
||||
gic: interrupt-controller@2a701000 {
|
||||
compatible = "arm,gic-400";
|
||||
reg = <0x0 0x2a701000 0 0x10000>,
|
||||
--
|
||||
2.45.2
|
||||
|
@@ -4,8 +4,6 @@ Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
|
||||
include/linux/pwm.h | 13 +++++++
|
||||
2 files changed, 100 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
|
||||
index 6e752e148b98..b97e2ea0691d 100644
|
||||
--- a/drivers/pwm/core.c
|
||||
+++ b/drivers/pwm/core.c
|
||||
@@ -31,6 +31,24 @@ static DEFINE_MUTEX(pwm_lock);
|
||||
@@ -33,7 +31,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
static void pwm_apply_debug(struct pwm_device *pwm,
|
||||
const struct pwm_state *state)
|
||||
{
|
||||
@@ -220,6 +238,7 @@ static int __pwm_apply(struct pwm_device *pwm, const struct pwm_state *state)
|
||||
@@ -224,6 +242,7 @@ static int __pwm_apply(struct pwm_device
|
||||
int pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state)
|
||||
{
|
||||
int err;
|
||||
@@ -41,7 +39,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
|
||||
/*
|
||||
* Some lowlevel driver's implementations of .apply() make use of
|
||||
@@ -230,7 +249,12 @@ int pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state)
|
||||
@@ -234,7 +253,12 @@ int pwm_apply_might_sleep(struct pwm_dev
|
||||
*/
|
||||
might_sleep();
|
||||
|
||||
@@ -55,7 +53,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
/*
|
||||
* Catch any drivers that have been marked as atomic but
|
||||
* that will sleep anyway.
|
||||
@@ -254,9 +278,16 @@ EXPORT_SYMBOL_GPL(pwm_apply_might_sleep);
|
||||
@@ -258,9 +282,16 @@ EXPORT_SYMBOL_GPL(pwm_apply_might_sleep)
|
||||
*/
|
||||
int pwm_apply_atomic(struct pwm_device *pwm, const struct pwm_state *state)
|
||||
{
|
||||
@@ -73,7 +71,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
return __pwm_apply(pwm, state);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pwm_apply_atomic);
|
||||
@@ -336,6 +367,11 @@ static int pwm_capture(struct pwm_device *pwm, struct pwm_capture *result,
|
||||
@@ -340,6 +371,11 @@ static int pwm_capture(struct pwm_device
|
||||
|
||||
guard(mutex)(&pwm_lock);
|
||||
|
||||
@@ -85,7 +83,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
return ops->capture(chip, pwm, result, timeout);
|
||||
}
|
||||
|
||||
@@ -368,6 +404,14 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label)
|
||||
@@ -372,6 +408,14 @@ static int pwm_device_request(struct pwm
|
||||
if (test_bit(PWMF_REQUESTED, &pwm->flags))
|
||||
return -EBUSY;
|
||||
|
||||
@@ -100,7 +98,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
if (!try_module_get(chip->owner))
|
||||
return -ENODEV;
|
||||
|
||||
@@ -396,7 +440,9 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label)
|
||||
@@ -400,7 +444,9 @@ err_get_device:
|
||||
*/
|
||||
struct pwm_state state = { 0, };
|
||||
|
||||
@@ -111,7 +109,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
trace_pwm_get(pwm, &state, err);
|
||||
|
||||
if (!err)
|
||||
@@ -1020,6 +1066,7 @@ struct pwm_chip *pwmchip_alloc(struct device *parent, unsigned int npwm, size_t
|
||||
@@ -1024,6 +1070,7 @@ struct pwm_chip *pwmchip_alloc(struct de
|
||||
|
||||
chip->npwm = npwm;
|
||||
chip->uses_pwmchip_alloc = true;
|
||||
@@ -119,7 +117,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
|
||||
pwmchip_dev = &chip->dev;
|
||||
device_initialize(pwmchip_dev);
|
||||
@@ -1125,6 +1172,11 @@ int __pwmchip_add(struct pwm_chip *chip, struct module *owner)
|
||||
@@ -1129,6 +1176,11 @@ int __pwmchip_add(struct pwm_chip *chip,
|
||||
|
||||
chip->owner = owner;
|
||||
|
||||
@@ -131,7 +129,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
guard(mutex)(&pwm_lock);
|
||||
|
||||
ret = idr_alloc(&pwm_chips, chip, 0, 0, GFP_KERNEL);
|
||||
@@ -1138,6 +1190,9 @@ int __pwmchip_add(struct pwm_chip *chip, struct module *owner)
|
||||
@@ -1142,6 +1194,9 @@ int __pwmchip_add(struct pwm_chip *chip,
|
||||
if (IS_ENABLED(CONFIG_OF))
|
||||
of_pwmchip_add(chip);
|
||||
|
||||
@@ -141,7 +139,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
ret = device_add(&chip->dev);
|
||||
if (ret)
|
||||
goto err_device_add;
|
||||
@@ -1145,6 +1200,9 @@ int __pwmchip_add(struct pwm_chip *chip, struct module *owner)
|
||||
@@ -1149,6 +1204,9 @@ int __pwmchip_add(struct pwm_chip *chip,
|
||||
return 0;
|
||||
|
||||
err_device_add:
|
||||
@@ -151,7 +149,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
if (IS_ENABLED(CONFIG_OF))
|
||||
of_pwmchip_remove(chip);
|
||||
|
||||
@@ -1164,11 +1222,27 @@ void pwmchip_remove(struct pwm_chip *chip)
|
||||
@@ -1168,11 +1226,27 @@ void pwmchip_remove(struct pwm_chip *chi
|
||||
{
|
||||
pwmchip_sysfs_unexport(chip);
|
||||
|
||||
@@ -182,7 +180,7 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
|
||||
device_del(&chip->dev);
|
||||
}
|
||||
@@ -1538,12 +1612,17 @@ void pwm_put(struct pwm_device *pwm)
|
||||
@@ -1542,12 +1616,17 @@ void pwm_put(struct pwm_device *pwm)
|
||||
|
||||
guard(mutex)(&pwm_lock);
|
||||
|
||||
@@ -202,8 +200,6 @@ index 6e752e148b98..b97e2ea0691d 100644
|
||||
pwm->chip->ops->free(pwm->chip, pwm);
|
||||
|
||||
pwm->label = NULL;
|
||||
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
|
||||
index 8acd60b53f58..464054a45e57 100644
|
||||
--- a/include/linux/pwm.h
|
||||
+++ b/include/linux/pwm.h
|
||||
@@ -275,6 +275,9 @@ struct pwm_ops {
|
||||
@@ -233,5 +229,3 @@ index 8acd60b53f58..464054a45e57 100644
|
||||
struct pwm_device pwms[] __counted_by(npwm);
|
||||
};
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
@@ -59,11 +59,9 @@ Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
|
||||
include/linux/pwm.h | 36 +++++++
|
||||
2 files changed, 249 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
|
||||
index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
--- a/drivers/pwm/core.c
|
||||
+++ b/drivers/pwm/core.c
|
||||
@@ -49,6 +49,102 @@ static void pwmchip_unlock(struct pwm_chip *chip)
|
||||
@@ -49,6 +49,102 @@ static void pwmchip_unlock(struct pwm_ch
|
||||
|
||||
DEFINE_GUARD(pwmchip, struct pwm_chip *, pwmchip_lock(_T), pwmchip_unlock(_T))
|
||||
|
||||
@@ -166,7 +164,7 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
static void pwm_apply_debug(struct pwm_device *pwm,
|
||||
const struct pwm_state *state)
|
||||
{
|
||||
@@ -182,6 +278,7 @@ static bool pwm_state_valid(const struct pwm_state *state)
|
||||
@@ -186,6 +282,7 @@ static bool pwm_state_valid(const struct
|
||||
static int __pwm_apply(struct pwm_device *pwm, const struct pwm_state *state)
|
||||
{
|
||||
struct pwm_chip *chip;
|
||||
@@ -174,7 +172,7 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
int err;
|
||||
|
||||
if (!pwm || !state)
|
||||
@@ -205,6 +302,7 @@ static int __pwm_apply(struct pwm_device *pwm, const struct pwm_state *state)
|
||||
@@ -209,6 +306,7 @@ static int __pwm_apply(struct pwm_device
|
||||
}
|
||||
|
||||
chip = pwm->chip;
|
||||
@@ -182,7 +180,7 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
|
||||
if (state->period == pwm->state.period &&
|
||||
state->duty_cycle == pwm->state.duty_cycle &&
|
||||
@@ -213,18 +311,69 @@ static int __pwm_apply(struct pwm_device *pwm, const struct pwm_state *state)
|
||||
@@ -217,18 +315,69 @@ static int __pwm_apply(struct pwm_device
|
||||
state->usage_power == pwm->state.usage_power)
|
||||
return 0;
|
||||
|
||||
@@ -262,7 +260,7 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -292,6 +441,41 @@ int pwm_apply_atomic(struct pwm_device *pwm, const struct pwm_state *state)
|
||||
@@ -296,6 +445,41 @@ int pwm_apply_atomic(struct pwm_device *
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pwm_apply_atomic);
|
||||
|
||||
@@ -304,7 +302,7 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
/**
|
||||
* pwm_adjust_config() - adjust the current PWM config to the PWM arguments
|
||||
* @pwm: PWM device
|
||||
@@ -435,7 +619,7 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label)
|
||||
@@ -434,7 +618,7 @@ err_get_device:
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +311,7 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
/*
|
||||
* Zero-initialize state because most drivers are unaware of
|
||||
* .usage_power. The other members of state are supposed to be
|
||||
@@ -445,11 +629,7 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label)
|
||||
@@ -444,11 +628,7 @@ err_get_device:
|
||||
*/
|
||||
struct pwm_state state = { 0, };
|
||||
|
||||
@@ -326,7 +324,7 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
if (!err)
|
||||
pwm->state = state;
|
||||
|
||||
@@ -1136,12 +1316,24 @@ static bool pwm_ops_check(const struct pwm_chip *chip)
|
||||
@@ -1135,12 +1315,24 @@ static bool pwm_ops_check(const struct p
|
||||
{
|
||||
const struct pwm_ops *ops = chip->ops;
|
||||
|
||||
@@ -337,10 +335,7 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
+ !ops->round_waveform_fromhw ||
|
||||
+ !ops->write_waveform)
|
||||
+ return false;
|
||||
|
||||
- if (IS_ENABLED(CONFIG_PWM_DEBUG) && !ops->get_state)
|
||||
- dev_warn(pwmchip_parent(chip),
|
||||
- "Please implement the .get_state() callback\n");
|
||||
+
|
||||
+ if (WFHWSIZE < ops->sizeof_wfhw) {
|
||||
+ dev_warn(pwmchip_parent(chip), "WFHWSIZE < %zu\n", ops->sizeof_wfhw);
|
||||
+ return false;
|
||||
@@ -348,7 +343,10 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
+ } else {
|
||||
+ if (!ops->apply)
|
||||
+ return false;
|
||||
+
|
||||
|
||||
- if (IS_ENABLED(CONFIG_PWM_DEBUG) && !ops->get_state)
|
||||
- dev_warn(pwmchip_parent(chip),
|
||||
- "Please implement the .get_state() callback\n");
|
||||
+ if (IS_ENABLED(CONFIG_PWM_DEBUG) && !ops->get_state)
|
||||
+ dev_warn(pwmchip_parent(chip),
|
||||
+ "Please implement the .get_state() callback\n");
|
||||
@@ -356,8 +354,6 @@ index 5a095eb46b544f..bbe7bfdb154927 100644
|
||||
|
||||
return true;
|
||||
}
|
||||
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
|
||||
index 3ea73e075abe87..d8cfe1c9b19d83 100644
|
||||
--- a/include/linux/pwm.h
|
||||
+++ b/include/linux/pwm.h
|
||||
@@ -49,6 +49,31 @@ enum {
|
||||
|
@@ -22,11 +22,9 @@ Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
|
||||
include/linux/pwm.h | 6 +-
|
||||
2 files changed, 266 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
|
||||
index bbe7bfdb154927..038f17dd275798 100644
|
||||
--- a/drivers/pwm/core.c
|
||||
+++ b/drivers/pwm/core.c
|
||||
@@ -49,6 +49,30 @@ static void pwmchip_unlock(struct pwm_chip *chip)
|
||||
@@ -49,6 +49,30 @@ static void pwmchip_unlock(struct pwm_ch
|
||||
|
||||
DEFINE_GUARD(pwmchip, struct pwm_chip *, pwmchip_lock(_T), pwmchip_unlock(_T))
|
||||
|
||||
@@ -57,7 +55,7 @@ index bbe7bfdb154927..038f17dd275798 100644
|
||||
static void pwm_wf2state(const struct pwm_waveform *wf, struct pwm_state *state)
|
||||
{
|
||||
if (wf->period_length_ns) {
|
||||
@@ -95,6 +119,29 @@ static void pwm_state2wf(const struct pwm_state *state, struct pwm_waveform *wf)
|
||||
@@ -95,6 +119,29 @@ static void pwm_state2wf(const struct pw
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +85,7 @@ index bbe7bfdb154927..038f17dd275798 100644
|
||||
static bool pwm_check_rounding(const struct pwm_waveform *wf,
|
||||
const struct pwm_waveform *wf_rounded)
|
||||
{
|
||||
@@ -145,6 +192,220 @@ static int __pwm_write_waveform(struct pwm_chip *chip, struct pwm_device *pwm, c
|
||||
@@ -145,6 +192,220 @@ static int __pwm_write_waveform(struct p
|
||||
|
||||
#define WFHWSIZE 20
|
||||
|
||||
@@ -308,11 +306,9 @@ index bbe7bfdb154927..038f17dd275798 100644
|
||||
static void pwm_apply_debug(struct pwm_device *pwm,
|
||||
const struct pwm_state *state)
|
||||
{
|
||||
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
|
||||
index d8cfe1c9b19d83..c3d9ddeafa65e1 100644
|
||||
--- a/include/linux/pwm.h
|
||||
+++ b/include/linux/pwm.h
|
||||
@@ -358,7 +358,11 @@ static inline void pwmchip_set_drvdata(struct pwm_chip *chip, void *data)
|
||||
@@ -358,7 +358,11 @@ static inline void pwmchip_set_drvdata(s
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_PWM)
|
||||
|
@@ -3,11 +3,9 @@ Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.yaml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.yaml
|
||||
index 960758dc417f7405010fab067bfbf6f5c4704179..125af766b99297dc229db158846daea974dda28e 100644
|
||||
--- a/Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.yaml
|
||||
+++ b/Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.yaml
|
||||
@@ -135,7 +135,7 @@ additionalProperties:
|
||||
@@ -133,7 +133,7 @@ additionalProperties:
|
||||
description:
|
||||
Pin bank index.
|
||||
- minimum: 0
|
||||
@@ -16,6 +14,3 @@ index 960758dc417f7405010fab067bfbf6f5c4704179..125af766b99297dc229db158846daea9
|
||||
description:
|
||||
Mux 0 means GPIO and mux 1 to N means
|
||||
the specific device function.
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -4,9 +4,6 @@ Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
MAINTAINERS | 7 ++
|
||||
2 files changed, 101 insertions(+)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/pwm/rockchip,rk3576-pwm.yaml b/Documentation/devicetree/bindings/pwm/rockchip,rk3576-pwm.yaml
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..143d4df5df8fa89d508faca5ddf67603fb7cb3f5
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/pwm/rockchip,rk3576-pwm.yaml
|
||||
@@ -0,0 +1,94 @@
|
||||
@@ -104,11 +101,9 @@ index 0000000000000000000000000000000000000000..143d4df5df8fa89d508faca5ddf67603
|
||||
+ #pwm-cells = <3>;
|
||||
+ };
|
||||
+ };
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index 96b82704950184bd71623ff41fc4df31e4c7fe87..407179d2a90dd49800f2bb5770a1280c5afebb5a 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -20885,6 +20885,13 @@ F: Documentation/userspace-api/media/v4l/metafmt-rkisp1.rst
|
||||
@@ -19952,6 +19952,13 @@ F: Documentation/userspace-api/media/v4l
|
||||
F: drivers/media/platform/rockchip/rkisp1
|
||||
F: include/uapi/linux/rkisp1-config.h
|
||||
|
||||
@@ -122,6 +117,3 @@ index 96b82704950184bd71623ff41fc4df31e4c7fe87..407179d2a90dd49800f2bb5770a1280c
|
||||
ROCKCHIP RK3568 RANDOM NUMBER GENERATOR SUPPORT
|
||||
M: Daniel Golle <daniel@makrotopia.org>
|
||||
M: Aurelien Jarno <aurelien@aurel32.net>
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -3,9 +3,6 @@ Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
include/soc/rockchip/utils.h | 76 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 76 insertions(+)
|
||||
|
||||
diff --git a/include/soc/rockchip/utils.h b/include/soc/rockchip/utils.h
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..3349069e75ff51ebd7a22089af796feafd227ffb
|
||||
--- /dev/null
|
||||
+++ b/include/soc/rockchip/utils.h
|
||||
@@ -0,0 +1,76 @@
|
||||
@@ -85,6 +82,3 @@ index 0000000000000000000000000000000000000000..3349069e75ff51ebd7a22089af796fea
|
||||
+ REG_UPDATE_WE((__val), (__bit), (__bit)))
|
||||
+
|
||||
+#endif /* __SOC_ROCKCHIP_UTILS_H__ */
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -7,11 +7,9 @@ Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
include/soc/rockchip/mfpwm.h | 505 +++++++++++++++++++++++++++++++++++
|
||||
5 files changed, 1129 insertions(+)
|
||||
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index 407179d2a90dd49800f2bb5770a1280c5afebb5a..e6a9347be1e7889089e1d9e655cb23c2d8399b40 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -20891,6 +20891,8 @@ L: linux-rockchip@lists.infradead.org
|
||||
@@ -19958,6 +19958,8 @@ L: linux-rockchip@lists.infradead.org
|
||||
L: linux-pwm@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/pwm/rockchip,rk3576-pwm.yaml
|
||||
@@ -20,8 +18,6 @@ index 407179d2a90dd49800f2bb5770a1280c5afebb5a..e6a9347be1e7889089e1d9e655cb23c2
|
||||
|
||||
ROCKCHIP RK3568 RANDOM NUMBER GENERATOR SUPPORT
|
||||
M: Daniel Golle <daniel@makrotopia.org>
|
||||
diff --git a/drivers/soc/rockchip/Kconfig b/drivers/soc/rockchip/Kconfig
|
||||
index 785f60c6f3ad1a09f517e69a69726a8178bed168..4e1e4926c514a5a2c4d4caf8cf9809a098badc7d 100644
|
||||
--- a/drivers/soc/rockchip/Kconfig
|
||||
+++ b/drivers/soc/rockchip/Kconfig
|
||||
@@ -30,4 +30,17 @@ config ROCKCHIP_DTPM
|
||||
@@ -42,8 +38,6 @@ index 785f60c6f3ad1a09f517e69a69726a8178bed168..4e1e4926c514a5a2c4d4caf8cf9809a0
|
||||
+ implemented in their respective subsystems.
|
||||
+
|
||||
endif
|
||||
diff --git a/drivers/soc/rockchip/Makefile b/drivers/soc/rockchip/Makefile
|
||||
index 23d414433c8c58557effc214337ec8e6ff17a461..ba12dbd01ac794910d9407c268e89071cd2b3139 100644
|
||||
--- a/drivers/soc/rockchip/Makefile
|
||||
+++ b/drivers/soc/rockchip/Makefile
|
||||
@@ -5,3 +5,4 @@
|
||||
@@ -51,9 +45,6 @@ index 23d414433c8c58557effc214337ec8e6ff17a461..ba12dbd01ac794910d9407c268e89071
|
||||
obj-$(CONFIG_ROCKCHIP_IODOMAIN) += io-domain.o
|
||||
obj-$(CONFIG_ROCKCHIP_DTPM) += dtpm.o
|
||||
+obj-$(CONFIG_ROCKCHIP_MFPWM) += mfpwm.o
|
||||
diff --git a/drivers/soc/rockchip/mfpwm.c b/drivers/soc/rockchip/mfpwm.c
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..9331c530f0581573e2b74f62a6622b8625c5b2c5
|
||||
--- /dev/null
|
||||
+++ b/drivers/soc/rockchip/mfpwm.c
|
||||
@@ -0,0 +1,608 @@
|
||||
@@ -665,9 +656,6 @@ index 0000000000000000000000000000000000000000..9331c530f0581573e2b74f62a6622b86
|
||||
+MODULE_AUTHOR("Nicolas Frattaroli <nicolas.frattaroli@collabora.com>");
|
||||
+MODULE_DESCRIPTION("Rockchip MFPWM Driver");
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/include/soc/rockchip/mfpwm.h b/include/soc/rockchip/mfpwm.h
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..345f13f438b57159a15cb2e0ae250800fb96ed43
|
||||
--- /dev/null
|
||||
+++ b/include/soc/rockchip/mfpwm.h
|
||||
@@ -0,0 +1,505 @@
|
||||
@@ -1176,6 +1164,3 @@ index 0000000000000000000000000000000000000000..345f13f438b57159a15cb2e0ae250800
|
||||
+void mfpwm_remove_func(struct rockchip_mfpwm_func *pwmf);
|
||||
+
|
||||
+#endif /* __SOC_ROCKCHIP_MFPWM_H__ */
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -6,11 +6,9 @@ Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
drivers/pwm/pwm-rockchip-v4.c | 336 ++++++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 351 insertions(+)
|
||||
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index e6a9347be1e7889089e1d9e655cb23c2d8399b40..3ddd245fd4ad8d9ed2e762910a7a1f6436f93e34 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -20891,6 +20891,7 @@ L: linux-rockchip@lists.infradead.org
|
||||
@@ -19958,6 +19958,7 @@ L: linux-rockchip@lists.infradead.org
|
||||
L: linux-pwm@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/pwm/rockchip,rk3576-pwm.yaml
|
||||
@@ -18,8 +16,6 @@ index e6a9347be1e7889089e1d9e655cb23c2d8399b40..3ddd245fd4ad8d9ed2e762910a7a1f64
|
||||
F: drivers/soc/rockchip/mfpwm.c
|
||||
F: include/soc/rockchip/mfpwm.h
|
||||
|
||||
diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig
|
||||
index 4731d5b90d7edcc61138e4a5bf7e98906953ece4..242039f62ab091cea337bf27ef310bcf696b6ed0 100644
|
||||
--- a/drivers/pwm/Kconfig
|
||||
+++ b/drivers/pwm/Kconfig
|
||||
@@ -540,6 +540,19 @@ config PWM_ROCKCHIP
|
||||
@@ -42,11 +38,9 @@ index 4731d5b90d7edcc61138e4a5bf7e98906953ece4..242039f62ab091cea337bf27ef310bcf
|
||||
config PWM_RZ_MTU3
|
||||
tristate "Renesas RZ/G2L MTU3a PWM Timer support"
|
||||
depends on RZ_MTU3
|
||||
diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile
|
||||
index 539e0def3f82fcb866ab83a0346a15f7efdd7127..b5aca7ff58ac83f844581df526624617025291de 100644
|
||||
--- a/drivers/pwm/Makefile
|
||||
+++ b/drivers/pwm/Makefile
|
||||
@@ -49,6 +49,7 @@ obj-$(CONFIG_PWM_RASPBERRYPI_POE) += pwm-raspberrypi-poe.o
|
||||
@@ -49,6 +49,7 @@ obj-$(CONFIG_PWM_RASPBERRYPI_POE) += pwm
|
||||
obj-$(CONFIG_PWM_RCAR) += pwm-rcar.o
|
||||
obj-$(CONFIG_PWM_RENESAS_TPU) += pwm-renesas-tpu.o
|
||||
obj-$(CONFIG_PWM_ROCKCHIP) += pwm-rockchip.o
|
||||
@@ -54,9 +48,6 @@ index 539e0def3f82fcb866ab83a0346a15f7efdd7127..b5aca7ff58ac83f844581df526624617
|
||||
obj-$(CONFIG_PWM_RZ_MTU3) += pwm-rz-mtu3.o
|
||||
obj-$(CONFIG_PWM_SAMSUNG) += pwm-samsung.o
|
||||
obj-$(CONFIG_PWM_SIFIVE) += pwm-sifive.o
|
||||
diff --git a/drivers/pwm/pwm-rockchip-v4.c b/drivers/pwm/pwm-rockchip-v4.c
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..980b27454ef9b930bef0496ca528533cf419fa0e
|
||||
--- /dev/null
|
||||
+++ b/drivers/pwm/pwm-rockchip-v4.c
|
||||
@@ -0,0 +1,336 @@
|
||||
@@ -396,6 +387,3 @@ index 0000000000000000000000000000000000000000..980b27454ef9b930bef0496ca528533c
|
||||
+MODULE_DESCRIPTION("Rockchip PWMv4 Driver");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_IMPORT_NS("ROCKCHIP_MFPWM");
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -6,11 +6,9 @@ Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
|
||||
drivers/counter/rockchip-pwm-capture.c | 341 +++++++++++++++++++++++++++++++++
|
||||
4 files changed, 356 insertions(+)
|
||||
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index 3ddd245fd4ad8d9ed2e762910a7a1f6436f93e34..e5d26256d05a04a9642371cf3dbb4dd0c1c34e68 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -20891,6 +20891,7 @@ L: linux-rockchip@lists.infradead.org
|
||||
@@ -19958,6 +19958,7 @@ L: linux-rockchip@lists.infradead.org
|
||||
L: linux-pwm@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/pwm/rockchip,rk3576-pwm.yaml
|
||||
@@ -18,8 +16,6 @@ index 3ddd245fd4ad8d9ed2e762910a7a1f6436f93e34..e5d26256d05a04a9642371cf3dbb4dd0
|
||||
F: drivers/pwm/pwm-rockchip-v4.c
|
||||
F: drivers/soc/rockchip/mfpwm.c
|
||||
F: include/soc/rockchip/mfpwm.h
|
||||
diff --git a/drivers/counter/Kconfig b/drivers/counter/Kconfig
|
||||
index d30d22dfe57741b145a45632b6325d5f9680590e..01b4f5c326478c73b518041830ee0d65b37f6833 100644
|
||||
--- a/drivers/counter/Kconfig
|
||||
+++ b/drivers/counter/Kconfig
|
||||
@@ -90,6 +90,19 @@ config MICROCHIP_TCB_CAPTURE
|
||||
@@ -42,18 +38,13 @@ index d30d22dfe57741b145a45632b6325d5f9680590e..01b4f5c326478c73b518041830ee0d65
|
||||
config RZ_MTU3_CNT
|
||||
tristate "Renesas RZ/G2L MTU3a counter driver"
|
||||
depends on RZ_MTU3
|
||||
diff --git a/drivers/counter/Makefile b/drivers/counter/Makefile
|
||||
index fa3c1d08f7068835aa912aa13bc92bcfd44d16fb..2bfcfc2c584bd174a9885064746a98f15b204aec 100644
|
||||
--- a/drivers/counter/Makefile
|
||||
+++ b/drivers/counter/Makefile
|
||||
@@ -17,3 +17,4 @@ obj-$(CONFIG_FTM_QUADDEC) += ftm-quaddec.o
|
||||
@@ -17,3 +17,4 @@ obj-$(CONFIG_FTM_QUADDEC) += ftm-quaddec
|
||||
obj-$(CONFIG_MICROCHIP_TCB_CAPTURE) += microchip-tcb-capture.o
|
||||
obj-$(CONFIG_INTEL_QEP) += intel-qep.o
|
||||
obj-$(CONFIG_TI_ECAP_CAPTURE) += ti-ecap-capture.o
|
||||
+obj-$(CONFIG_ROCKCHIP_PWM_CAPTURE) += rockchip-pwm-capture.o
|
||||
diff --git a/drivers/counter/rockchip-pwm-capture.c b/drivers/counter/rockchip-pwm-capture.c
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..b2bfa2c6e04dfa0410fa0d7ef1c395217e4a9db2
|
||||
--- /dev/null
|
||||
+++ b/drivers/counter/rockchip-pwm-capture.c
|
||||
@@ -0,0 +1,341 @@
|
||||
@@ -398,6 +389,3 @@ index 0000000000000000000000000000000000000000..b2bfa2c6e04dfa0410fa0d7ef1c39521
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_IMPORT_NS("ROCKCHIP_MFPWM");
|
||||
+MODULE_IMPORT_NS("COUNTER");
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -1,8 +1,6 @@
|
||||
diff --git a/drivers/pwm/pwm-rockchip-v4.c b/drivers/pwm/pwm-rockchip-v4.c
|
||||
index 980b27454..3bc3d4979 100644
|
||||
--- a/drivers/pwm/pwm-rockchip-v4.c
|
||||
+++ b/drivers/pwm/pwm-rockchip-v4.c
|
||||
@@ -292,6 +292,8 @@ static int rockchip_pwm_v4_probe(struct platform_device *pdev)
|
||||
@@ -292,6 +292,8 @@ static int rockchip_pwm_v4_probe(struct
|
||||
if (IS_ERR(chip))
|
||||
return PTR_ERR(chip);
|
||||
|
||||
|
@@ -8,8 +8,6 @@ Changes in v2:
|
||||
drivers/mmc/host/sdhci-of-dwcmshc.c | 39 +++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 39 insertions(+)
|
||||
|
||||
diff --git a/drivers/mmc/host/sdhci-of-dwcmshc.c b/drivers/mmc/host/sdhci-of-dwcmshc.c
|
||||
index 09b9ab15e4995f0bddf57dd309c010c849be40d9..a00aec05eff2da8197cc64690ba9665be756e54a 100644
|
||||
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c
|
||||
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
|
||||
@@ -17,6 +17,7 @@
|
||||
@@ -20,7 +18,7 @@ index 09b9ab15e4995f0bddf57dd309c010c849be40d9..a00aec05eff2da8197cc64690ba9665b
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/reset.h>
|
||||
#include <linux/sizes.h>
|
||||
@@ -745,6 +746,28 @@ static void dwcmshc_rk35xx_postinit(struct sdhci_host *host, struct dwcmshc_priv
|
||||
@@ -787,6 +788,28 @@ static void dwcmshc_rk35xx_postinit(stru
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +47,7 @@ index 09b9ab15e4995f0bddf57dd309c010c849be40d9..a00aec05eff2da8197cc64690ba9665b
|
||||
static int th1520_execute_tuning(struct sdhci_host *host, u32 opcode)
|
||||
{
|
||||
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
|
||||
@@ -1176,6 +1199,18 @@ static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = {
|
||||
@@ -1218,6 +1241,18 @@ static const struct dwcmshc_pltfm_data s
|
||||
.postinit = dwcmshc_rk35xx_postinit,
|
||||
};
|
||||
|
||||
@@ -68,16 +66,14 @@ index 09b9ab15e4995f0bddf57dd309c010c849be40d9..a00aec05eff2da8197cc64690ba9665b
|
||||
static const struct dwcmshc_pltfm_data sdhci_dwcmshc_th1520_pdata = {
|
||||
.pdata = {
|
||||
.ops = &sdhci_dwcmshc_th1520_ops,
|
||||
@@ -1274,6 +1309,10 @@ static const struct of_device_id sdhci_dwcmshc_dt_ids[] = {
|
||||
.compatible = "rockchip,rk3588-dwcmshc",
|
||||
@@ -1317,6 +1352,10 @@ static const struct of_device_id sdhci_d
|
||||
.data = &sdhci_dwcmshc_rk35xx_pdata,
|
||||
},
|
||||
+ {
|
||||
{
|
||||
+ .compatible = "rockchip,rk3576-dwcmshc",
|
||||
+ .data = &sdhci_dwcmshc_rk3576_pdata,
|
||||
+ },
|
||||
{
|
||||
+ {
|
||||
.compatible = "rockchip,rk3568-dwcmshc",
|
||||
.data = &sdhci_dwcmshc_rk35xx_pdata,
|
||||
|
||||
---
|
||||
},
|
||||
|
@@ -11,7 +11,7 @@ Signed-off-by: wevsty <ty@wevs.org>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
|
||||
@@ -1127,10 +1127,10 @@
|
||||
@@ -1132,10 +1132,10 @@
|
||||
};
|
||||
|
||||
rng: rng@fe388000 {
|
||||
|
@@ -191,7 +191,7 @@ Signed-off-by: hmz007 <hmz007@gmail.com>
|
||||
const char *const *parent_names,
|
||||
--- a/include/soc/rockchip/rockchip_sip.h
|
||||
+++ b/include/soc/rockchip/rockchip_sip.h
|
||||
@@ -16,5 +16,16 @@
|
||||
@@ -19,5 +19,16 @@
|
||||
#define ROCKCHIP_SIP_CONFIG_DRAM_CLR_IRQ 0x06
|
||||
#define ROCKCHIP_SIP_CONFIG_DRAM_SET_PARAM 0x07
|
||||
#define ROCKCHIP_SIP_CONFIG_DRAM_SET_ODT_PD 0x08
|
||||
|
@@ -9,7 +9,7 @@ Signed-off-by: hmz007 <hmz007@gmail.com>
|
||||
|
||||
--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
|
||||
@@ -1074,6 +1074,13 @@
|
||||
@@ -1075,6 +1075,13 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@@ -54,5 +54,5 @@
|
||||
+};
|
||||
+
|
||||
&gmac2io {
|
||||
phy-handle = <&yt8531c>;
|
||||
tx_delay = <0x19>;
|
||||
/delete-property/ tx_delay;
|
||||
/delete-property/ rx_delay;
|
||||
|
@@ -2,7 +2,7 @@
|
||||
index 83a7af898..b92e702d1 100644
|
||||
--- a/net/rfkill/Kconfig
|
||||
+++ b/net/rfkill/Kconfig
|
||||
@@ -32,3 +32,12 @@ config RFKILL_GPIO
|
||||
@@ -36,3 +36,12 @@ config RFKILL_GPIO
|
||||
help
|
||||
If you say yes here you get support of a generic gpio RFKILL
|
||||
driver.
|
||||
@@ -15,19 +15,14 @@ index 83a7af898..b92e702d1 100644
|
||||
+ help
|
||||
+ If you say yes here you get support of a new generic gpio RFKILL
|
||||
+ driver.
|
||||
diff --git a/net/rfkill/Makefile b/net/rfkill/Makefile
|
||||
index dc47b6174..680302e72 100644
|
||||
--- a/net/rfkill/Makefile
|
||||
+++ b/net/rfkill/Makefile
|
||||
@@ -7,3 +7,5 @@ rfkill-y += core.o
|
||||
rfkill-$(CONFIG_RFKILL_INPUT) += input.o
|
||||
obj-$(CONFIG_RFKILL) += rfkill.o
|
||||
obj-$(CONFIG_RFKILL_FULL) += rfkill.o
|
||||
obj-$(CONFIG_RFKILL_GPIO) += rfkill-gpio.o
|
||||
+
|
||||
+obj-$(CONFIG_RFKILL_GPIO_NEO) += rfkill-gpio-neo.o
|
||||
diff --git a/net/rfkill/rfkill-gpio-neo.c b/net/rfkill/rfkill-gpio-neo.c
|
||||
new file mode 100644
|
||||
index 000000000..745e417e6
|
||||
--- /dev/null
|
||||
+++ b/net/rfkill/rfkill-gpio-neo.c
|
||||
@@ -0,0 +1,261 @@
|
||||
|
@@ -1,5 +1,5 @@
|
||||
--- a/drivers/net/phy/motorcomm.c 2025-02-14 18:58:18.691542738 +0900
|
||||
+++ b/drivers/net/phy/motorcomm.c 2025-02-14 19:05:00.299135505 +0900
|
||||
--- a/drivers/net/phy/motorcomm.c
|
||||
+++ b/drivers/net/phy/motorcomm.c
|
||||
@@ -353,6 +353,12 @@
|
||||
#define YT8821_CHIP_MODE_AUTO_BX2500_SGMII 0
|
||||
#define YT8821_CHIP_MODE_FORCE_BX2500 1
|
||||
@@ -13,7 +13,7 @@
|
||||
struct yt8521_priv {
|
||||
/* combo_advertising is used for case of YT8521 in combo mode,
|
||||
* this means that yt8521 may work in utp or fiber mode which depends
|
||||
@@ -1577,6 +1583,20 @@
|
||||
@@ -1577,6 +1583,20 @@ static int yt8521_modify_utp_fiber_bmcr(
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
/**
|
||||
* yt8521_soft_reset() - called to issue a PHY software reset
|
||||
* @phydev: a pointer to a &struct phy_device
|
||||
@@ -1677,6 +1697,9 @@
|
||||
@@ -1677,6 +1697,9 @@ static int yt8521_config_init(struct phy
|
||||
if (ret < 0)
|
||||
goto err_restore_page;
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c 2025-03-06 21:30:53.981108971 +0900
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c 2025-03-06 21:30:06.752107940 +0900
|
||||
@@ -138,6 +138,7 @@
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
|
||||
@@ -138,6 +138,7 @@ struct rockchip_combphy_grfcfg {
|
||||
struct combphy_reg pipe_xpcs_phy_ready;
|
||||
struct combphy_reg pipe_pcie1l0_sel;
|
||||
struct combphy_reg pipe_pcie1l1_sel;
|
||||
@@ -8,7 +8,7 @@
|
||||
};
|
||||
|
||||
struct rockchip_combphy_cfg {
|
||||
@@ -290,6 +291,7 @@
|
||||
@@ -290,6 +291,7 @@ static struct phy *rockchip_combphy_xlat
|
||||
|
||||
static int rockchip_combphy_parse_dt(struct device *dev, struct rockchip_combphy_priv *priv)
|
||||
{
|
||||
@@ -16,7 +16,7 @@
|
||||
int i;
|
||||
|
||||
priv->num_clks = devm_clk_bulk_get_all(dev, &priv->clks);
|
||||
@@ -325,6 +327,11 @@
|
||||
@@ -325,6 +327,11 @@ static int rockchip_combphy_parse_dt(str
|
||||
|
||||
priv->ext_refclk = device_property_present(dev, "rockchip,ext-refclk");
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
priv->phy_rst = devm_reset_control_get_exclusive(dev, "phy");
|
||||
/* fallback to old behaviour */
|
||||
if (PTR_ERR(priv->phy_rst) == -ENOENT)
|
||||
@@ -704,6 +711,7 @@
|
||||
@@ -704,6 +711,7 @@ static const struct rockchip_combphy_grf
|
||||
/* pipe-grf */
|
||||
.pipe_con0_for_sata = { 0x0000, 15, 0, 0x00, 0x2220 },
|
||||
.pipe_xpcs_phy_ready = { 0x0040, 2, 2, 0x00, 0x01 },
|
||||
|
@@ -1,8 +1,8 @@
|
||||
--- a/arch/x86/include/asm/intel-family.h
|
||||
+++ b/arch/x86/include/asm/intel-family.h
|
||||
@@ -126,6 +126,8 @@
|
||||
#define INTEL_GRANITERAPIDS_X IFM(6, 0xAD) /* Redwood Cove */
|
||||
#define INTEL_GRANITERAPIDS_D IFM(6, 0xAE)
|
||||
@@ -117,6 +117,8 @@
|
||||
|
||||
#define INTEL_BARTLETTLAKE IFM(6, 0xD7) /* Raptor Cove */
|
||||
|
||||
+#define INTEL_RAPTORCOVE IFM(6, 0xD7) /* Bartlett Lake */
|
||||
+
|
||||
|
@@ -15,7 +15,7 @@ when FPU is not usable.
|
||||
|
||||
--- a/crypto/Kconfig
|
||||
+++ b/crypto/Kconfig
|
||||
@@ -683,6 +683,16 @@ config CRYPTO_HCTR2
|
||||
@@ -685,6 +685,16 @@ config CRYPTO_HCTR2
|
||||
|
||||
See https://eprint.iacr.org/2021/1441
|
||||
|
||||
|
@@ -9,7 +9,7 @@
|
||||
```sh
|
||||
curl -fSsLO https://raw.githubusercontent.com/enfein/mieru/refs/heads/main/tools/setup.py
|
||||
chmod +x setup.py
|
||||
sudo python3 setup.py
|
||||
sudo python3 setup.py --lang=zh
|
||||
```
|
||||
|
||||
或者,你也可以使用以下步骤手动安装并配置代理服务器。
|
||||
|
@@ -60,6 +60,14 @@ mita proxy server is not installed.
|
||||
Type "y" to install mita proxy server.
|
||||
Type any other character to exit.
|
||||
(default is "y")
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
install_prompt = '''
|
||||
[安装 mita]
|
||||
尚未安装 mita 代理服务器软件。
|
||||
输入 "y" 开始安装 mita 代理服务器软件。
|
||||
输入其他任意字符退出。
|
||||
(默认值是 "y")
|
||||
>>> '''
|
||||
install, _ = check_input(prompt=install_prompt, validator=any_validator(), default='y')
|
||||
if install != 'y':
|
||||
@@ -83,6 +91,15 @@ A new version {sys_info.latest_mita_version} is available.
|
||||
Type "y" to update mita proxy server.
|
||||
Type any other character to exit.
|
||||
(default is "y")
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
update_prompt = f'''
|
||||
[更新 mita]
|
||||
已安装的 mita 代理服务器软件版本是 {sys_info.installed_mita_version} 。
|
||||
最新版本是 {sys_info.latest_mita_version} 。
|
||||
输入 "y" 开始更新 mita 代理服务器软件。
|
||||
输入其他任意字符退出。
|
||||
(默认值是 "y")
|
||||
>>> '''
|
||||
update, _ = check_input(prompt=update_prompt, validator=any_validator(), default='y')
|
||||
if update != 'y':
|
||||
@@ -103,33 +120,65 @@ mita proxy server is installed but not configured.
|
||||
Type "y" to configure mita proxy server.
|
||||
Type any other character to exit.
|
||||
(default is "y")
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
configure_prompt = '''
|
||||
[配置 mita 代理服务器]
|
||||
mita 代理服务器已经安装但尚未配置。
|
||||
输入 "y" 开始配置 mita 代理服务器。
|
||||
输入其他任意字符退出。
|
||||
(默认值是 "y")
|
||||
>>> '''
|
||||
configure, _ = check_input(prompt=configure_prompt, validator=any_validator(), default='y')
|
||||
if configure != 'y':
|
||||
return
|
||||
configurer = Configurer()
|
||||
add_op_user_prompt = '''
|
||||
[configure mita server][add operation user]
|
||||
[configure mita server][add Linux operation user]
|
||||
Type a Linux user name to add the user to "mita" group,
|
||||
such that the user can invoke mita command.
|
||||
Otherwise, only root user can invoke mita command.
|
||||
Press Enter to skip (default).
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
add_op_user_prompt = '''
|
||||
[配置 mita 代理服务器][添加 Linux 操作用户]
|
||||
输入一个 Linux 用户名,将其添加至 "mita" 用户组,
|
||||
该用户将可以调用 mita 指令。
|
||||
否则,只有 root 用户可以调用 mita 指令。
|
||||
输入回车跳过这个步骤(默认)。
|
||||
>>> '''
|
||||
op_user, _ = check_input(prompt=add_op_user_prompt, validator=any_validator())
|
||||
if op_user != "":
|
||||
if configurer.add_operation_user(op_user):
|
||||
if _lang == ZH:
|
||||
print(f'已添加 {op_user} 至 mita 用户组。')
|
||||
else:
|
||||
print(f'Added {op_user} to mita group.')
|
||||
else:
|
||||
if _lang == ZH:
|
||||
print(f'添加 {op_user} 至 mita 用户组失败。')
|
||||
else:
|
||||
print(f'Failed to add {op_user} to mita group.')
|
||||
configurer.configure_server(sys_info)
|
||||
if not configurer.restart_mita():
|
||||
print_exit(f'Failed to restart mita proxy server.')
|
||||
if _lang == ZH:
|
||||
print_exit('重新启动 mita 代理服务失败。')
|
||||
else:
|
||||
print_exit('Failed to restart mita proxy server.')
|
||||
sys_info.is_mita_config_applied = True
|
||||
build_client_prompt = '''
|
||||
[configure mieru client]
|
||||
Type "y" to generate mieru proxy client configuration.
|
||||
Type any other character to exit.
|
||||
(default is "y")
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
build_client_prompt = '''
|
||||
[配置 mieru 客户端]
|
||||
输入 "y" 生成 mieru 代理客户端的配置。
|
||||
输入其他任意字符退出。
|
||||
(默认值是 "y")
|
||||
>>> '''
|
||||
build_client, _ = check_input(prompt=build_client_prompt, validator=any_validator(), default='y')
|
||||
if build_client != 'y':
|
||||
@@ -141,9 +190,17 @@ Type any other character to exit.
|
||||
uninstall_prompt = '''
|
||||
[uninstall mita]
|
||||
mita proxy server is installed.
|
||||
Type "y" to uninstall mita proxy server.
|
||||
Type "y" to uninstall mita proxy server and delete configuration.
|
||||
Type any other character to exit.
|
||||
(default is "n")
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
uninstall_prompt = '''
|
||||
[卸载 mita]
|
||||
已经安装 mita 代理服务器。
|
||||
输入 "y" 卸载 mita 代理服务器并删除配置。
|
||||
输入其他任意字符退出。
|
||||
(默认值是 "n")
|
||||
>>> '''
|
||||
uninstall, _ = check_input(prompt=uninstall_prompt, validator=any_validator(), default='n')
|
||||
if uninstall != 'y':
|
||||
@@ -161,9 +218,15 @@ class SysInfo:
|
||||
|
||||
self.package_manager = self.detect_package_manager()
|
||||
if self.package_manager == '':
|
||||
if _lang == ZH:
|
||||
print_exit('检测系统包管理器失败。支持 deb 和 rpm。')
|
||||
else:
|
||||
print_exit('Failed to detect system package manager. Supported: deb, rpm.')
|
||||
self.cpu_arch = self.detect_cpu_arch()
|
||||
if self.cpu_arch == '':
|
||||
if _lang == ZH:
|
||||
print_exit('检测 CPU 架构失败。支持 amd64 和 arm64。')
|
||||
else:
|
||||
print_exit('Failed to detect CPU architecture. Supported: amd64, arm64.')
|
||||
|
||||
self.is_mita_installed = self.detect_mita_installed()
|
||||
@@ -184,17 +247,26 @@ class SysInfo:
|
||||
|
||||
def check_python_version(self) -> None:
|
||||
if sys.version_info < (3, 8, 0):
|
||||
if _lang == ZH:
|
||||
print_exit('Python 版本必须为 3.8.0 或更高。')
|
||||
else:
|
||||
print_exit('Python version must be 3.8.0 or higher.')
|
||||
|
||||
|
||||
def check_platform(self) -> None:
|
||||
if not sys.platform.startswith('linux'):
|
||||
if _lang == ZH:
|
||||
print_exit('只能在 Linux 系统中运行此程序。')
|
||||
else:
|
||||
print_exit('You can only run this program on Linux.')
|
||||
|
||||
|
||||
def check_permission(self) -> None:
|
||||
uid = os.getuid()
|
||||
if uid != 0:
|
||||
if _lang == ZH:
|
||||
print_exit('只有 root 用户可以运行此程序。')
|
||||
else:
|
||||
print_exit('Only root user can run this program.')
|
||||
|
||||
|
||||
@@ -285,6 +357,9 @@ class SysInfo:
|
||||
j = json.loads(body.decode('utf-8'))
|
||||
return j['tag_name'].strip('v')
|
||||
except Exception as e:
|
||||
if _lang == ZH:
|
||||
print_exit(f'查询最新的 mita 版本失败:{e}')
|
||||
else:
|
||||
print_exit(f'Failed to query latest mita version: {e}')
|
||||
|
||||
|
||||
@@ -437,6 +512,9 @@ class Installer:
|
||||
Return the path of downloaded file.
|
||||
'''
|
||||
if sys_info.latest_mita_version == None:
|
||||
if _lang == ZH:
|
||||
print_exit('获取 mita 的最新版本失败。')
|
||||
else:
|
||||
print_exit('Latest mita version is unknown.')
|
||||
ver = sys_info.latest_mita_version
|
||||
download_url = ''
|
||||
@@ -449,13 +527,25 @@ class Installer:
|
||||
elif sys_info.package_manager == 'rpm' and sys_info.cpu_arch == 'arm64':
|
||||
download_url = f'https://github.com/enfein/mieru/releases/download/v{ver}/mita-{ver}-1.aarch64.rpm'
|
||||
else:
|
||||
print_exit(f'Failed to determine download URL based on package manager {sys_info.package_manager} and CPU architecture {sys_info.cpu_arch}')
|
||||
if _lang == ZH:
|
||||
print_exit(f'从包管理器 {sys_info.package_manager} 和 CPU 架构 {sys_info.cpu_arch} 无法决定下载链接。')
|
||||
else:
|
||||
print_exit(f'Failed to determine download URL based on package manager {sys_info.package_manager} and CPU architecture {sys_info.cpu_arch}.')
|
||||
filename = os.path.join('/tmp', download_url.split('/')[-1])
|
||||
try:
|
||||
if _lang == ZH:
|
||||
print(f'正在下载 {download_url}')
|
||||
else:
|
||||
print(f'Downloading from {download_url}')
|
||||
urllib.request.urlretrieve(download_url, filename)
|
||||
if _lang == ZH:
|
||||
print(f'下载文件存储在 {filename}')
|
||||
else:
|
||||
print(f'Downloaded to {filename}')
|
||||
except urllib.error.URLError as e:
|
||||
if _lang == ZH:
|
||||
print_exit(f'下载 {download_url} 失败:{e}')
|
||||
else:
|
||||
print_exit(f'Failed to download {download_url}: {e}')
|
||||
return filename
|
||||
|
||||
@@ -466,11 +556,20 @@ class Installer:
|
||||
if ext == 'deb':
|
||||
run_command(args=['dpkg', '-i', package_path],
|
||||
timeout=60, check=True, print_args=True, print_stdout=True)
|
||||
if _lang == ZH:
|
||||
print(f'已安装 {package_path}')
|
||||
else:
|
||||
print(f'Installed {package_path}')
|
||||
elif ext == 'rpm':
|
||||
run_command(args=['rpm', '-Uvh', '--force', package_path],
|
||||
timeout=60, check=True, print_args=True, print_stdout=True)
|
||||
if _lang == ZH:
|
||||
print(f'已安装 {package_path}')
|
||||
else:
|
||||
print(f'Installed {package_path}')
|
||||
else:
|
||||
if _lang == ZH:
|
||||
print_exit(f'无法安装 {basename}:它不是 deb 或 rpm 安装包。')
|
||||
else:
|
||||
print_exit(f'Unable to install {basename}: it is not a deb or a rpm package.')
|
||||
|
||||
@@ -502,43 +601,74 @@ class Configurer:
|
||||
# Refresh the latest information and check pre-condition.
|
||||
sys_info.is_mita_installed = sys_info.detect_mita_installed()
|
||||
if not sys_info.is_mita_installed:
|
||||
if _lang == ZH:
|
||||
print_exit('mita 代理服务器软件尚未安装。')
|
||||
else:
|
||||
print_exit('mita proxy server is not installed.')
|
||||
sys_info.is_mita_systemd_active = sys_info.detect_mita_systemd_active()
|
||||
if not sys_info.is_mita_systemd_active:
|
||||
if _lang == ZH:
|
||||
print_exit('mita systemd 服务尚未运行。')
|
||||
else:
|
||||
print_exit('mita systemd service is not active.')
|
||||
|
||||
while True:
|
||||
# Let user to set server configuration.
|
||||
if len(self._server_config.users()) == 0:
|
||||
if not self.configure_users():
|
||||
print('configure user is not successful')
|
||||
if _lang == ZH:
|
||||
print('配置用户失败。')
|
||||
else:
|
||||
print('Configure user is not successful.')
|
||||
continue
|
||||
if len(self._server_config.port_bindings()) == 0:
|
||||
if not self.configure_port_bindings():
|
||||
print('configure protocol and ports is not successful')
|
||||
if _lang == ZH:
|
||||
print('配置协议和端口失败。')
|
||||
else:
|
||||
print('Configure protocol and ports is not successful.')
|
||||
continue
|
||||
|
||||
# Let user to confirm the server configuration.
|
||||
if _lang == ZH:
|
||||
print('即将应用下面的代理服务器配置:')
|
||||
else:
|
||||
print('The following server configuration will be applied:')
|
||||
print('')
|
||||
self.describe_server_config()
|
||||
print('')
|
||||
confirm_prompt = '''Type "y" or "n" to apply or discard the server configuration.
|
||||
(default is "y")
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
confirm_prompt = '''输入 "y" 确定,输入 "n" 取消。
|
||||
(默认值是 "y")
|
||||
>>> '''
|
||||
confirm, valid = check_input(prompt=confirm_prompt, validator=match_preset_validator(['y', 'n']), default='y')
|
||||
if not valid:
|
||||
self._server_config = ServerConfig()
|
||||
if _lang == ZH:
|
||||
print(f'输入 {confirm} 是非法选项。已丢弃代理服务器配置。')
|
||||
else:
|
||||
print(f'Invalid input: {confirm} is an invalid option. Discarded the server configuration.')
|
||||
continue
|
||||
if confirm == 'y':
|
||||
config_path = self.apply_server_config()
|
||||
if config_path != '':
|
||||
if _lang == ZH:
|
||||
print(f'代理服务器配置文件存储在 {config_path}')
|
||||
else:
|
||||
print(f'Server configuration file is stored at {config_path}')
|
||||
return
|
||||
if _lang == ZH:
|
||||
print_exit('应用代理服务器配置失败。')
|
||||
else:
|
||||
print_exit('Apply server configuration is not successful.')
|
||||
else:
|
||||
self._server_config = ServerConfig()
|
||||
if _lang == ZH:
|
||||
print('已丢弃代理服务器配置。')
|
||||
else:
|
||||
print('Discarded the server configuration.')
|
||||
continue
|
||||
|
||||
@@ -551,38 +681,71 @@ class Configurer:
|
||||
while True:
|
||||
try:
|
||||
external_ip = urllib.request.urlopen('https://checkip.amazonaws.com').read().decode('utf8').strip()
|
||||
print(f'Your external IP address is: {external_ip}')
|
||||
if _lang == ZH:
|
||||
print(f'服务器的公网 IP 地址是 {external_ip}')
|
||||
else:
|
||||
print(f'Server\'s public IP address is: {external_ip}')
|
||||
except Exception as e:
|
||||
print(f'Failed to retrieve external IP address: {e}')
|
||||
if _lang == ZH:
|
||||
print(f'获取服务器的公网 IP 地址失败:{e}')
|
||||
else:
|
||||
print(f'Failed to retrieve server\'s public IP address: {e}')
|
||||
time.sleep(1)
|
||||
continue
|
||||
socks5_port_prompt = '''
|
||||
[configure mieru client][configure socks5 listening port]
|
||||
Type a single port number to listen to socks5 requests.
|
||||
(default is "1080")
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
socks5_port_prompt = '''
|
||||
[配置 mieru 客户端][配置 socks5 监听端口]
|
||||
输入一个端口号用于监听 socks5 请求。
|
||||
(默认值是 "1080")
|
||||
>>> '''
|
||||
socks5_port, valid = check_input(prompt=socks5_port_prompt, validator=port_validator(), default='1080')
|
||||
if not valid:
|
||||
print(f'Invalid input: {socks5_port} is an invalid port number')
|
||||
if _lang == ZH:
|
||||
print(f'输入 {socks5_port} 是非法的端口号。')
|
||||
else:
|
||||
print(f'Invalid input: {socks5_port} is an invalid port number.')
|
||||
continue
|
||||
http_port_prompt = '''
|
||||
[configure mieru client][configure HTTP proxy listening port]
|
||||
Type a single port number to listen to HTTP and HTTPS requests.
|
||||
Type a single port number to listen to HTTP and HTTPS proxy requests.
|
||||
(default is "8080")
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
http_port_prompt = '''
|
||||
[配置 mieru 客户端][配置 HTTP 代理监听端口]
|
||||
输入一个端口号用于监听 HTTP 和 HTTPS 代理请求。
|
||||
(默认值是 "8080")
|
||||
>>> '''
|
||||
http_port, valid = check_input(prompt=http_port_prompt, validator=port_validator(), default='8080')
|
||||
if not valid:
|
||||
print(f'Invalid input: {http_port} is an invalid port number')
|
||||
if _lang == ZH:
|
||||
print(f'输入 {http_port} 是非法的端口号。')
|
||||
else:
|
||||
print(f'Invalid input: {http_port} is an invalid port number.')
|
||||
continue
|
||||
rpc_port_prompt = '''
|
||||
[configure mieru client][configure management listening port]
|
||||
Type a single port number to listen to management RPC requests.
|
||||
(default is randonly select a number from 2000 to 8000)
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
rpc_port_prompt = '''
|
||||
[配置 mieru 客户端][配置管理监听端口]
|
||||
输入一个端口号用于监听管理 RPC 请求。
|
||||
(默认值是从 2000 到 8000 随机选取一个数字)
|
||||
>>> '''
|
||||
rpc_port_default = str(random.randint(2000, 8000))
|
||||
rpc_port, valid = check_input(prompt=rpc_port_prompt, validator=port_validator(), default=rpc_port_default)
|
||||
if not valid:
|
||||
print(f'Invalid input: {rpc_port} is an invalid port number')
|
||||
if _lang == ZH:
|
||||
print(f'输入 {rpc_port} 是非法的端口号。')
|
||||
else:
|
||||
print(f'Invalid input: {rpc_port} is an invalid port number.')
|
||||
continue
|
||||
self._client_config.set_user(self._server_config.users()[0]['name'], self._server_config.users()[0]['password'])
|
||||
if 'port' in self._server_config.port_bindings()[0]:
|
||||
@@ -594,10 +757,16 @@ Type a single port number to listen to management RPC requests.
|
||||
self._server_config.port_bindings()[0]['portRange'],
|
||||
self._server_config.port_bindings()[0]['protocol'])
|
||||
else:
|
||||
print_exit(f'Found invalid server configuration port bindings.')
|
||||
if _lang == ZH:
|
||||
print_exit('代理服务器的端口绑定设置是非法的。')
|
||||
else:
|
||||
print_exit('Found invalid server configuration port bindings.')
|
||||
self._client_config.set_rpc_port(int(rpc_port))
|
||||
self._client_config.set_socks5_port(int(socks5_port))
|
||||
self._client_config.set_http_proxy_port(int(http_port))
|
||||
if _lang == ZH:
|
||||
print('生成了下面的客户端配置:')
|
||||
else:
|
||||
print('The following client configuration is generated:')
|
||||
print('')
|
||||
print(self._client_config.to_json())
|
||||
@@ -607,10 +776,16 @@ Type a single port number to listen to management RPC requests.
|
||||
ntf.write(self._client_config.to_json())
|
||||
ntf.flush()
|
||||
except Exception as e:
|
||||
if _lang == ZH:
|
||||
print(f'存储客户端配置至 {ntf.name} 失败:{e}')
|
||||
else:
|
||||
print(f'Failed to save client configuration to {ntf.name}: {e}')
|
||||
return ''
|
||||
finally:
|
||||
ntf.close()
|
||||
if _lang == ZH:
|
||||
print(f'客户端配置文件存储在 {ntf.name}')
|
||||
else:
|
||||
print(f'Client configuration file is stored at {ntf.name}')
|
||||
return
|
||||
|
||||
@@ -628,34 +803,59 @@ Type a single port number to listen to management RPC requests.
|
||||
def configure_users(self) -> bool:
|
||||
op_prompt = '''
|
||||
[configure mita server][configure proxy user]
|
||||
Type a number to select from the options below.
|
||||
Type number "1" or "2" to select from the options below.
|
||||
(1): automatically generate user name and password (default)
|
||||
(2): manually type user name and password
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
op_prompt = '''
|
||||
[配置 mita 代理服务器][配置代理用户]
|
||||
输入数字 "1" 或 "2" 选择下面的选项。
|
||||
(1): 自动生成用户名和密码 (默认值)
|
||||
(2): 手动输入用户名和密码
|
||||
>>> '''
|
||||
op, valid = check_input(prompt=op_prompt, validator=match_preset_validator(['1', '2']), default='1')
|
||||
if not valid:
|
||||
print(f'Invalid input: {op} is an invalid option')
|
||||
if _lang == ZH:
|
||||
print(f'输入 {op} 是非法的选项。')
|
||||
else:
|
||||
print(f'Invalid input: {op} is an invalid option.')
|
||||
return False
|
||||
if op == '1':
|
||||
self._server_config.set_user(self.generate_random_str(), self.generate_random_str())
|
||||
return True
|
||||
elif op == '2':
|
||||
user_prompt = '''Type a user name
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
user_prompt = '''输入用户名
|
||||
>>> '''
|
||||
u, valid = check_input(prompt=user_prompt, validator=not_empty_validator())
|
||||
if not valid:
|
||||
print('Invalid input: user name is empty')
|
||||
if _lang == ZH:
|
||||
print('输入的用户名为空值。')
|
||||
else:
|
||||
print('Invalid input: user name is empty.')
|
||||
return False
|
||||
pass_prompt = '''Type a password
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
pass_prompt = '''输入密码
|
||||
>>> '''
|
||||
p, valid = check_input(prompt=pass_prompt, validator=not_empty_validator())
|
||||
if not valid:
|
||||
print('Invalid input: password is empty')
|
||||
if _lang == ZH:
|
||||
print('输入的密码为空值。')
|
||||
else:
|
||||
print('Invalid input: password is empty.')
|
||||
return False
|
||||
self._server_config.set_user(u, p)
|
||||
return True
|
||||
else:
|
||||
print(f'{op} is an invalid option')
|
||||
if _lang == ZH:
|
||||
print(f'{op} 是非法的选项。')
|
||||
else:
|
||||
print(f'{op} is an invalid option.')
|
||||
return False
|
||||
|
||||
|
||||
@@ -663,40 +863,72 @@ Type a number to select from the options below.
|
||||
protocol_prompt = '''
|
||||
[configure mita server][configure protocol and ports]
|
||||
Type the proxy protocol to use. Support "TCP" and "UDP".
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
protocol_prompt = '''
|
||||
[配置 mita 代理服务器][配置协议和端口]
|
||||
输入代理协议。支持 "TCP" 和 "UDP"。
|
||||
>>> '''
|
||||
protocol, valid = check_input(prompt=protocol_prompt, validator=match_preset_validator(['TCP', 'UDP']))
|
||||
if not valid:
|
||||
print(f'Invalid input: {protocol} is an invalid protocol')
|
||||
if _lang == ZH:
|
||||
print(f'输入 {protocol} 是非法的协议。')
|
||||
else:
|
||||
print(f'Invalid input: {protocol} is an invalid protocol.')
|
||||
return False
|
||||
op_prompt = '''Type a number to select from the options below.
|
||||
op_prompt = '''Type number "1" or "2" to select from the options below.
|
||||
(1): add a single listening port like "9000" (default)
|
||||
(2): add a listening port range like "9000-9010"
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
op_prompt = '''输入数字 "1" 或 "2" 选择下面的选项。
|
||||
(1): 添加一个端口号,例如 "9000" (默认值)
|
||||
(2): 添加一个端口段,例如 "9000-9010"
|
||||
>>> '''
|
||||
op, valid = check_input(prompt=op_prompt, validator=match_preset_validator(['1', '2']), default='1')
|
||||
if not valid:
|
||||
print(f'Invalid input: {op} is an invalid option')
|
||||
if _lang == ZH:
|
||||
print(f'输入 {op} 是非法的选项。')
|
||||
else:
|
||||
print(f'Invalid input: {op} is an invalid option.')
|
||||
return False
|
||||
if op == '1':
|
||||
port_prompt = '''Type a single port number like "9000".
|
||||
port_prompt = '''Type a single port number.
|
||||
Minimum value is 1. Maximum value is 65535.
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
port_prompt = '''输入一个端口号。
|
||||
最小值为 1。最大值为 65535。
|
||||
>>> '''
|
||||
port, valid = check_input(prompt=port_prompt, validator=port_validator())
|
||||
if not valid:
|
||||
print(f'Invalid input: {port} is an invalid port number')
|
||||
if _lang == ZH:
|
||||
print(f'输入 {port} 是非法的端口号。')
|
||||
else:
|
||||
print(f'Invalid input: {port} is an invalid port number.')
|
||||
return False
|
||||
self._server_config.add_port(int(port), protocol)
|
||||
return True
|
||||
elif op == '2':
|
||||
port_range_prompt = '''Type a port range like "9000-9010". No space character.
|
||||
>>> '''
|
||||
if _lang == ZH:
|
||||
port_range_prompt = '''输入一个端口段,例如 "9000-9010"。请勿使用空格分隔。
|
||||
>>> '''
|
||||
port_range, valid = check_input(prompt=port_range_prompt, validator=port_range_validator())
|
||||
if not valid:
|
||||
print(f'Invalid input: {port_range} is an invalid port range')
|
||||
if _lang == ZH:
|
||||
print(f'输入 {port_range} 是非法的端口段。')
|
||||
else:
|
||||
print(f'Invalid input: {port_range} is an invalid port range.')
|
||||
return False
|
||||
self._server_config.add_port_range(port_range, protocol)
|
||||
return True
|
||||
else:
|
||||
print(f'{op} is an invalid option')
|
||||
if _lang == ZH:
|
||||
print(f'{op} 是非法的选项。')
|
||||
else:
|
||||
print(f'{op} is an invalid option.')
|
||||
return False
|
||||
|
||||
|
||||
@@ -717,6 +949,9 @@ Minimum value is 1. Maximum value is 65535.
|
||||
ntf.write(self._server_config.to_json())
|
||||
ntf.flush()
|
||||
except Exception as e:
|
||||
if _lang == ZH:
|
||||
print(f'存储代理服务器配置至 {ntf.name} 失败:{e}')
|
||||
else:
|
||||
print(f'Failed to save server configuration to {ntf.name}: {e}')
|
||||
return ''
|
||||
finally:
|
||||
@@ -743,7 +978,10 @@ class Uninstaller:
|
||||
run_command(['systemctl', 'daemon-reload'], timeout=30, print_args=True)
|
||||
run_command(['userdel', 'mita'], print_args=True, print_stdout=True)
|
||||
run_command(['groupdel', 'mita'], print_args=True, print_stdout=True)
|
||||
print('mita proxy server is uninstalled')
|
||||
if _lang == ZH:
|
||||
print('成功卸载了 mita 代理服务器软件。')
|
||||
else:
|
||||
print('mita proxy server is uninstalled.')
|
||||
elif sys_info.package_manager == 'rpm':
|
||||
run_command(['systemctl', 'stop', 'mita'], print_args=True)
|
||||
run_command(['rpm', '-e', 'mita'], timeout=30, print_args=True, print_stdout=True)
|
||||
@@ -757,9 +995,15 @@ class Uninstaller:
|
||||
run_command(['systemctl', 'daemon-reload'], timeout=30, print_args=True)
|
||||
run_command(['userdel', 'mita'], print_args=True, print_stdout=True)
|
||||
run_command(['groupdel', 'mita'], print_args=True, print_stdout=True)
|
||||
print('mita proxy server is uninstalled')
|
||||
if _lang == ZH:
|
||||
print('成功卸载了 mita 代理服务器软件。')
|
||||
else:
|
||||
print_exit('Failed to uninstall mita: failed to detect system package manager')
|
||||
print('mita proxy server is uninstalled.')
|
||||
else:
|
||||
if _lang == ZH:
|
||||
print_exit('卸载 mita 代理服务器软件失败:未能成功检测系统包管理器。')
|
||||
else:
|
||||
print_exit('Failed to uninstall mita: failed to detect system package manager.')
|
||||
|
||||
|
||||
def run_command(args: List[str], input=None, timeout=10, check=False, print_args=False, print_stdout=False):
|
||||
@@ -768,6 +1012,9 @@ def run_command(args: List[str], input=None, timeout=10, check=False, print_args
|
||||
'''
|
||||
try:
|
||||
if print_args:
|
||||
if _lang == ZH:
|
||||
print(f'运行指令 {args}')
|
||||
else:
|
||||
print(f'Running command {args}')
|
||||
result = subprocess.run(args,
|
||||
input=input,
|
||||
@@ -777,8 +1024,14 @@ def run_command(args: List[str], input=None, timeout=10, check=False, print_args
|
||||
check=check,
|
||||
text=True)
|
||||
except subprocess.TimeoutExpired as te:
|
||||
if _lang == ZH:
|
||||
print_exit(f'指令 {te.cmd} 运行 {te.timeout} 秒后超时。输出:{te.output}')
|
||||
else:
|
||||
print_exit(f'Command {te.cmd} timed out after {te.timeout} seconds. Output: {te.output}')
|
||||
except subprocess.CalledProcessError as cpe:
|
||||
if _lang == ZH:
|
||||
print_exit(f'指令 {cpe.cmd} 的返回值为 {cpe.returncode}。输出:{cpe.output}')
|
||||
else:
|
||||
print_exit(f'Command {cpe.cmd} returned code {cpe.returncode}. Output: {cpe.output}')
|
||||
finally:
|
||||
if print_stdout and result.stdout:
|
||||
@@ -846,7 +1099,10 @@ def print_exit(*values: Any) -> None:
|
||||
'''
|
||||
Print and exit with a non-zero value.
|
||||
'''
|
||||
print("[ERROR]", *values)
|
||||
if _lang == ZH:
|
||||
print('[错误]', *values)
|
||||
else:
|
||||
print('[ERROR]', *values)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
|
@@ -3,6 +3,7 @@ package updater
|
||||
import (
|
||||
"archive/tar"
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -32,6 +33,17 @@ const (
|
||||
typeTarGzip
|
||||
)
|
||||
|
||||
func (t compressionType) String() string {
|
||||
switch t {
|
||||
case typeZip:
|
||||
return "zip"
|
||||
case typeTarGzip:
|
||||
return "tar.gz"
|
||||
default:
|
||||
return "unknown"
|
||||
}
|
||||
}
|
||||
|
||||
var DefaultUiUpdater = &UIUpdater{}
|
||||
|
||||
func NewUiUpdater(externalUI, externalUIURL, externalUIName string) *UIUpdater {
|
||||
@@ -99,48 +111,35 @@ func detectFileType(data []byte) compressionType {
|
||||
}
|
||||
|
||||
func (u *UIUpdater) downloadUI() error {
|
||||
err := u.prepareUIPath()
|
||||
if err != nil {
|
||||
return fmt.Errorf("prepare UI path failed: %w", err)
|
||||
}
|
||||
|
||||
data, err := downloadForBytes(u.externalUIURL)
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't download file: %w", err)
|
||||
}
|
||||
|
||||
fileType := detectFileType(data)
|
||||
if fileType == typeUnknown {
|
||||
return fmt.Errorf("unknown or unsupported file type")
|
||||
tmpDir := C.Path.Resolve("downloadUI.tmp")
|
||||
defer os.RemoveAll(tmpDir)
|
||||
extractedFolder, err := extract(data, tmpDir)
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't extract compressed file: %w", err)
|
||||
}
|
||||
|
||||
ext := ".zip"
|
||||
if fileType == typeTarGzip {
|
||||
ext = ".tgz"
|
||||
}
|
||||
|
||||
saved := path.Join(C.Path.HomeDir(), "download"+ext)
|
||||
log.Debugln("compression Type: %s", ext)
|
||||
if err = saveFile(data, saved); err != nil {
|
||||
return fmt.Errorf("can't save compressed file: %w", err)
|
||||
}
|
||||
defer os.Remove(saved)
|
||||
|
||||
err = cleanup(u.externalUIPath)
|
||||
log.Debugln("cleanupFolder: %s", u.externalUIPath)
|
||||
err = cleanup(u.externalUIPath) // cleanup files in dir don't remove dir itself
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
return fmt.Errorf("cleanup exist file error: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
extractedFolder, err := extract(saved, C.Path.HomeDir())
|
||||
err = u.prepareUIPath()
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't extract compressed file: %w", err)
|
||||
return fmt.Errorf("prepare UI path failed: %w", err)
|
||||
}
|
||||
|
||||
err = os.Rename(extractedFolder, u.externalUIPath)
|
||||
log.Debugln("moveFolder from %s to %s", extractedFolder, u.externalUIPath)
|
||||
err = moveDir(extractedFolder, u.externalUIPath) // move files from tmp to target
|
||||
if err != nil {
|
||||
return fmt.Errorf("rename UI folder failed: %w", err)
|
||||
return fmt.Errorf("move UI folder failed: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -155,12 +154,11 @@ func (u *UIUpdater) prepareUIPath() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func unzip(src, dest string) (string, error) {
|
||||
r, err := zip.OpenReader(src)
|
||||
func unzip(data []byte, dest string) (string, error) {
|
||||
r, err := zip.NewReader(bytes.NewReader(data), int64(len(data)))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer r.Close()
|
||||
|
||||
// check whether or not only exists singleRoot dir
|
||||
rootDir := ""
|
||||
@@ -199,17 +197,7 @@ func unzip(src, dest string) (string, error) {
|
||||
log.Debugln("extractedFolder: %s", extractedFolder)
|
||||
} else {
|
||||
log.Debugln("Match the multiRoot")
|
||||
// or put the files/dirs into new dir
|
||||
baseName := filepath.Base(src)
|
||||
baseName = strings.TrimSuffix(baseName, filepath.Ext(baseName))
|
||||
extractedFolder = filepath.Join(dest, baseName)
|
||||
|
||||
for i := 1; ; i++ {
|
||||
if _, err := os.Stat(extractedFolder); os.IsNotExist(err) {
|
||||
break
|
||||
}
|
||||
extractedFolder = filepath.Join(dest, fmt.Sprintf("%s_%d", baseName, i))
|
||||
}
|
||||
extractedFolder = dest
|
||||
log.Debugln("extractedFolder: %s", extractedFolder)
|
||||
}
|
||||
|
||||
@@ -221,13 +209,17 @@ func unzip(src, dest string) (string, error) {
|
||||
fpath = filepath.Join(extractedFolder, f.Name)
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(fpath, filepath.Clean(dest)+string(os.PathSeparator)) {
|
||||
if !inDest(fpath, dest) {
|
||||
return "", fmt.Errorf("invalid file path: %s", fpath)
|
||||
}
|
||||
if f.FileInfo().IsDir() {
|
||||
info := f.FileInfo()
|
||||
if info.IsDir() {
|
||||
os.MkdirAll(fpath, os.ModePerm)
|
||||
continue
|
||||
}
|
||||
if info.Mode()&os.ModeSymlink != 0 {
|
||||
continue // disallow symlink
|
||||
}
|
||||
if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -249,14 +241,8 @@ func unzip(src, dest string) (string, error) {
|
||||
return extractedFolder, nil
|
||||
}
|
||||
|
||||
func untgz(src, dest string) (string, error) {
|
||||
file, err := os.Open(src)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
gzr, err := gzip.NewReader(file)
|
||||
func untgz(data []byte, dest string) (string, error) {
|
||||
gzr, err := gzip.NewReader(bytes.NewReader(data))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -299,8 +285,7 @@ func untgz(src, dest string) (string, error) {
|
||||
isSingleRoot = false
|
||||
}
|
||||
|
||||
file.Seek(0, 0)
|
||||
gzr, _ = gzip.NewReader(file)
|
||||
_ = gzr.Reset(bytes.NewReader(data))
|
||||
tr = tar.NewReader(gzr)
|
||||
|
||||
var extractedFolder string
|
||||
@@ -310,17 +295,7 @@ func untgz(src, dest string) (string, error) {
|
||||
log.Debugln("extractedFolder: %s", extractedFolder)
|
||||
} else {
|
||||
log.Debugln("Match the multiRoot")
|
||||
baseName := filepath.Base(src)
|
||||
baseName = strings.TrimSuffix(baseName, filepath.Ext(baseName))
|
||||
baseName = strings.TrimSuffix(baseName, ".tar")
|
||||
extractedFolder = filepath.Join(dest, baseName)
|
||||
|
||||
for i := 1; ; i++ {
|
||||
if _, err := os.Stat(extractedFolder); os.IsNotExist(err) {
|
||||
break
|
||||
}
|
||||
extractedFolder = filepath.Join(dest, fmt.Sprintf("%s_%d", baseName, i))
|
||||
}
|
||||
extractedFolder = dest
|
||||
log.Debugln("extractedFolder: %s", extractedFolder)
|
||||
}
|
||||
|
||||
@@ -340,7 +315,7 @@ func untgz(src, dest string) (string, error) {
|
||||
fpath = filepath.Join(extractedFolder, cleanTarPath(header.Name))
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(fpath, filepath.Clean(dest)+string(os.PathSeparator)) {
|
||||
if !inDest(fpath, dest) {
|
||||
return "", fmt.Errorf("invalid file path: %s", fpath)
|
||||
}
|
||||
|
||||
@@ -367,16 +342,16 @@ func untgz(src, dest string) (string, error) {
|
||||
return extractedFolder, nil
|
||||
}
|
||||
|
||||
func extract(src, dest string) (string, error) {
|
||||
srcLower := strings.ToLower(src)
|
||||
switch {
|
||||
case strings.HasSuffix(srcLower, ".tar.gz") ||
|
||||
strings.HasSuffix(srcLower, ".tgz"):
|
||||
return untgz(src, dest)
|
||||
case strings.HasSuffix(srcLower, ".zip"):
|
||||
return unzip(src, dest)
|
||||
func extract(data []byte, dest string) (string, error) {
|
||||
fileType := detectFileType(data)
|
||||
log.Debugln("compression Type: %s", fileType)
|
||||
switch fileType {
|
||||
case typeZip:
|
||||
return unzip(data, dest)
|
||||
case typeTarGzip:
|
||||
return untgz(data, dest)
|
||||
default:
|
||||
return "", fmt.Errorf("unsupported file format: %s", src)
|
||||
return "", fmt.Errorf("unknown or unsupported file type")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,22 +373,40 @@ func cleanTarPath(path string) string {
|
||||
}
|
||||
|
||||
func cleanup(root string) error {
|
||||
if _, err := os.Stat(root); os.IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
return filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
||||
dirEntryList, err := os.ReadDir(root)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if info.IsDir() {
|
||||
if err := os.RemoveAll(path); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if err := os.Remove(path); err != nil {
|
||||
|
||||
for _, dirEntry := range dirEntryList {
|
||||
err = os.RemoveAll(filepath.Join(root, dirEntry.Name()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func moveDir(src string, dst string) error {
|
||||
dirEntryList, err := os.ReadDir(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, dirEntry := range dirEntryList {
|
||||
err = os.Rename(filepath.Join(src, dirEntry.Name()), filepath.Join(dst, dirEntry.Name()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func inDest(fpath, dest string) bool {
|
||||
if rel, err := filepath.Rel(dest, fpath); err == nil {
|
||||
if filepath.IsLocal(rel) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
@@ -7,6 +7,7 @@ import (
|
||||
"net"
|
||||
"net/netip"
|
||||
"net/url"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
_ "unsafe"
|
||||
@@ -759,6 +760,9 @@ func parseController(cfg *RawConfig) (*Controller, error) {
|
||||
if path := cfg.ExternalUI; path != "" && !C.Path.IsSafePath(path) {
|
||||
return nil, C.Path.ErrNotSafePath(path)
|
||||
}
|
||||
if uiName := cfg.ExternalUIName; uiName != "" && !filepath.IsLocal(uiName) {
|
||||
return nil, fmt.Errorf("external UI name is not local: %s", uiName)
|
||||
}
|
||||
return &Controller{
|
||||
ExternalController: cfg.ExternalController,
|
||||
ExternalUI: cfg.ExternalUI,
|
||||
|
@@ -10,13 +10,25 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_ARCH_DDNSTO:=$(ARCH)
|
||||
|
||||
PKG_NAME:=ddnsto
|
||||
PKG_VERSION:=3.0.4
|
||||
PKG_RELEASE:=$(PKG_ARCH_DDNSTO)-7
|
||||
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
|
||||
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
|
||||
PKG_SOURCE_DATE:=3.0.4
|
||||
PKG_RELEASE:=8
|
||||
ARCH_HEXCODE:=
|
||||
ifeq ($(ARCH),x86_64)
|
||||
ARCH_HEXCODE=8664
|
||||
else ifeq ($(ARCH),aarch64)
|
||||
ARCH_HEXCODE=aa64
|
||||
else ifeq ($(ARCH),arm)
|
||||
ARCH_HEXCODE=aa32
|
||||
else ifeq ($(ARCH),mipsel)
|
||||
ARCH_HEXCODE=1b0c
|
||||
endif
|
||||
PKG_SOURCE_VERSION:=$(ARCH_HEXCODE)
|
||||
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_SOURCE_DATE).tar.gz
|
||||
PKG_SOURCE_URL:=http://fw.koolcenter.com/binary/ddnsto/
|
||||
PKG_HASH:=486aa15a5e026b5a3aca72f1850746e127a7e86ef11db8a7c498dad29545eaf6
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_VERSION)
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
@@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk
|
||||
LUCI_TITLE:=LuCI support for ddnsto
|
||||
LUCI_DEPENDS:=+ddnsto +block-mount
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=3.0.4
|
||||
PKG_RELEASE:=0
|
||||
PKG_VERSION:=3.0.4-r1
|
||||
PKG_RELEASE:=
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
|
@@ -9,7 +9,7 @@ LUCI_TITLE:=LuCI support for quickstart
|
||||
LUCI_DEPENDS:=+quickstart +luci-app-store
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
PKG_VERSION:=0.8.17-1
|
||||
PKG_VERSION:=0.8.17-r1
|
||||
# PKG_RELEASE MUST be empty for luci.mk
|
||||
PKG_RELEASE:=
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@@ -1404,6 +1404,11 @@ body[class*="node-"] > .main > .main-left > .nav > .slide > .menu.active::before
|
||||
display: none;
|
||||
}
|
||||
|
||||
[data-page="admin-system-autoreboot"] {
|
||||
#cbi-autoreboot {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.cbi-section,
|
||||
.cbi-section-error,
|
||||
@@ -3536,6 +3541,11 @@ div[style*="display:grid;grid-template-columns:repeat"] {
|
||||
|
||||
h2 + p {
|
||||
margin-bottom: 1rem;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
button + div {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -18,7 +18,7 @@ local function _n(name)
|
||||
end
|
||||
|
||||
local ss_method_list = {
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
"none", "plain", "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
local security_list = { "none", "auto", "aes-128-gcm", "chacha20-poly1305", "zero" }
|
||||
|
@@ -15,7 +15,7 @@ local function _n(name)
|
||||
end
|
||||
|
||||
local ssrust_encrypt_method_list = {
|
||||
"plain", "none",
|
||||
"none", "plain",
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305",
|
||||
"2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@ local function _n(name)
|
||||
end
|
||||
|
||||
local x_ss_method_list = {
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
"none", "plain", "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
local header_type_list = {
|
||||
|
@@ -1247,14 +1247,14 @@ return view.extend({
|
||||
so = ss.option(form.Flag, 'ipv6', _('IPv6 support'));
|
||||
so.default = so.enabled;
|
||||
|
||||
so = ss.option(form.MultiValue, 'boot_server', _('Boot DNS server'),
|
||||
so = ss.option(form.MultiValue, 'boot_server', _('Bootstrap DNS server'),
|
||||
_('Used to resolve the domain of the DNS server. Must be IP.'));
|
||||
so.default = 'default-dns';
|
||||
so.load = L.bind(loadDNSServerLabel, so);
|
||||
so.validate = L.bind(validateNameserver, so);
|
||||
so.rmempty = false;
|
||||
|
||||
so = ss.option(form.MultiValue, 'bootnode_server', _('Boot DNS server (Node)'),
|
||||
so = ss.option(form.MultiValue, 'bootnode_server', _('Bootstrap DNS server (Node)'),
|
||||
_('Used to resolve the domain of the Proxy node.'));
|
||||
so.default = 'default-dns';
|
||||
so.load = L.bind(loadDNSServerLabel, so);
|
||||
|
@@ -265,11 +265,11 @@ msgid "Block DNS queries"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/client.js:905
|
||||
msgid "Boot DNS server"
|
||||
msgid "Bootstrap DNS server"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/client.js:912
|
||||
msgid "Boot DNS server (Node)"
|
||||
msgid "Bootstrap DNS server (Node)"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/global.js:777
|
||||
|
@@ -273,12 +273,12 @@ msgid "Block DNS queries"
|
||||
msgstr "封锁 DNS 请求"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/client.js:905
|
||||
msgid "Boot DNS server"
|
||||
msgstr "启动 DNS 服务器"
|
||||
msgid "Bootstrap DNS server"
|
||||
msgstr "引导 DNS 服务器"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/client.js:912
|
||||
msgid "Boot DNS server (Node)"
|
||||
msgstr "启动 DNS 服务器 (节点)"
|
||||
msgid "Bootstrap DNS server (Node)"
|
||||
msgstr "引导 DNS 服务器 (节点)"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/global.js:777
|
||||
msgid "Bypass CN"
|
||||
|
@@ -273,12 +273,12 @@ msgid "Block DNS queries"
|
||||
msgstr "封鎖 DNS 請求"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/client.js:905
|
||||
msgid "Boot DNS server"
|
||||
msgstr "啟動 DNS 伺服器"
|
||||
msgid "Bootstrap DNS server"
|
||||
msgstr "引導 DNS 伺服器"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/client.js:912
|
||||
msgid "Boot DNS server (Node)"
|
||||
msgstr "啟動 DNS 伺服器 (節點)"
|
||||
msgid "Bootstrap DNS server (Node)"
|
||||
msgstr "引導 DNS 伺服器 (節點)"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/global.js:777
|
||||
msgid "Bypass CN"
|
||||
|
@@ -18,7 +18,7 @@ local function _n(name)
|
||||
end
|
||||
|
||||
local ss_method_list = {
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
"none", "plain", "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
local security_list = { "none", "auto", "aes-128-gcm", "chacha20-poly1305", "zero" }
|
||||
|
@@ -15,7 +15,7 @@ local function _n(name)
|
||||
end
|
||||
|
||||
local ssrust_encrypt_method_list = {
|
||||
"plain", "none",
|
||||
"none", "plain",
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305",
|
||||
"2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@ local function _n(name)
|
||||
end
|
||||
|
||||
local x_ss_method_list = {
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
"none", "plain", "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
local header_type_list = {
|
||||
|
@@ -6,12 +6,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=sing-box
|
||||
PKG_VERSION:=1.11.10
|
||||
PKG_VERSION:=1.11.11
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=b79281cbe1a9585bf53855ebc9513ccf2fe772983c4926554389ba0f5598da3e
|
||||
PKG_HASH:=31cc321efaa2fe9f3e3be9b065354552378f5a1dac49f6a24ce7e48d8a6c8979
|
||||
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
@@ -21,13 +21,13 @@ define Download/geoip
|
||||
HASH:=8023379316bca4713dcfa5ba4ea2fe7f4c127fff64a0cb7859d4756142b2c4dc
|
||||
endef
|
||||
|
||||
GEOSITE_VER:=20250508005311
|
||||
GEOSITE_VER:=20250519095148
|
||||
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
|
||||
define Download/geosite
|
||||
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
|
||||
URL_FILE:=dlc.dat
|
||||
FILE:=$(GEOSITE_FILE)
|
||||
HASH:=ff833c7e95d0dadb97ba7d96598563d159fabb0b774dcebea15f335797259f42
|
||||
HASH:=7a75b3ea15c2a5503b4dc46a677d8c98990860d6fe5378e16c0d98cb848b51a8
|
||||
endef
|
||||
|
||||
GEOSITE_IRAN_VER:=202505120041
|
||||
|
Reference in New Issue
Block a user