mirror of
https://github.com/bolucat/Archive.git
synced 2026-04-22 16:07:49 +08:00
Update On Mon Jun 2 20:42:06 CEST 2025
This commit is contained in:
@@ -1017,3 +1017,4 @@ Update On Thu May 29 20:38:42 CEST 2025
|
||||
Update On Fri May 30 20:41:25 CEST 2025
|
||||
Update On Sat May 31 20:34:20 CEST 2025
|
||||
Update On Sun Jun 1 20:35:02 CEST 2025
|
||||
Update On Mon Jun 2 20:41:58 CEST 2025
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"build": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tanstack/react-query": "5.76.2",
|
||||
"@tanstack/react-query": "5.79.0",
|
||||
"@tauri-apps/api": "2.5.0",
|
||||
"ahooks": "3.8.5",
|
||||
"dayjs": "1.11.13",
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
"@emotion/styled": "11.14.0",
|
||||
"@juggle/resize-observer": "3.4.0",
|
||||
"@material/material-color-utilities": "0.3.0",
|
||||
"@mui/icons-material": "7.1.0",
|
||||
"@mui/lab": "7.0.0-beta.12",
|
||||
"@mui/icons-material": "7.1.1",
|
||||
"@mui/lab": "7.0.0-beta.13",
|
||||
"@mui/x-date-pickers": "8.5.0",
|
||||
"@mui/material": "7.1.0",
|
||||
"@mui/material": "7.1.1",
|
||||
"@nyanpasu/interface": "workspace:^",
|
||||
"@nyanpasu/ui": "workspace:^",
|
||||
"@tailwindcss/postcss": "4.1.8",
|
||||
@@ -31,8 +31,8 @@
|
||||
"country-code-emoji": "2.3.0",
|
||||
"country-emoji": "1.5.6",
|
||||
"dayjs": "1.11.13",
|
||||
"framer-motion": "12.11.4",
|
||||
"i18next": "25.1.3",
|
||||
"framer-motion": "12.15.0",
|
||||
"i18next": "25.2.1",
|
||||
"jotai": "2.12.5",
|
||||
"json-schema": "0.4.0",
|
||||
"material-react-table": "3.2.1",
|
||||
@@ -55,9 +55,9 @@
|
||||
"@csstools/normalize.css": "12.1.1",
|
||||
"@emotion/babel-plugin": "11.13.5",
|
||||
"@emotion/react": "11.14.0",
|
||||
"@iconify/json": "2.2.343",
|
||||
"@iconify/json": "2.2.345",
|
||||
"@monaco-editor/react": "4.7.0",
|
||||
"@tanstack/react-query": "5.76.2",
|
||||
"@tanstack/react-query": "5.79.0",
|
||||
"@tanstack/react-router": "1.120.13",
|
||||
"@tanstack/react-router-devtools": "1.120.13",
|
||||
"@tanstack/router-plugin": "1.120.13",
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@material/material-color-utilities": "0.3.0",
|
||||
"@mui/icons-material": "7.1.0",
|
||||
"@mui/lab": "7.0.0-beta.12",
|
||||
"@mui/material": "7.1.0",
|
||||
"@mui/icons-material": "7.1.1",
|
||||
"@mui/lab": "7.0.0-beta.13",
|
||||
"@mui/material": "7.1.1",
|
||||
"@radix-ui/react-portal": "1.1.9",
|
||||
"@radix-ui/react-scroll-area": "1.2.9",
|
||||
"@tauri-apps/api": "2.5.0",
|
||||
@@ -23,7 +23,7 @@
|
||||
"@vitejs/plugin-react": "4.5.0",
|
||||
"ahooks": "3.8.5",
|
||||
"d3": "7.9.0",
|
||||
"framer-motion": "12.11.4",
|
||||
"framer-motion": "12.15.0",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-error-boundary": "6.0.0",
|
||||
|
||||
Generated
+148
-112
@@ -173,8 +173,8 @@ importers:
|
||||
frontend/interface:
|
||||
dependencies:
|
||||
'@tanstack/react-query':
|
||||
specifier: 5.76.2
|
||||
version: 5.76.2(react@19.1.0)
|
||||
specifier: 5.79.0
|
||||
version: 5.79.0(react@19.1.0)
|
||||
'@tauri-apps/api':
|
||||
specifier: 2.5.0
|
||||
version: 2.5.0
|
||||
@@ -225,17 +225,17 @@ importers:
|
||||
specifier: 0.3.0
|
||||
version: 0.3.0
|
||||
'@mui/icons-material':
|
||||
specifier: 7.1.0
|
||||
version: 7.1.0(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
specifier: 7.1.1
|
||||
version: 7.1.1(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/lab':
|
||||
specifier: 7.0.0-beta.12
|
||||
version: 7.0.0-beta.12(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 7.0.0-beta.13
|
||||
version: 7.0.0-beta.13(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material':
|
||||
specifier: 7.1.0
|
||||
version: 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 7.1.1
|
||||
version: 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/x-date-pickers':
|
||||
specifier: 8.5.0
|
||||
version: 8.5.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
version: 8.5.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@nyanpasu/interface':
|
||||
specifier: workspace:^
|
||||
version: link:../interface
|
||||
@@ -270,11 +270,11 @@ importers:
|
||||
specifier: 1.11.13
|
||||
version: 1.11.13
|
||||
framer-motion:
|
||||
specifier: 12.11.4
|
||||
version: 12.11.4(@emotion/is-prop-valid@1.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 12.15.0
|
||||
version: 12.15.0(@emotion/is-prop-valid@1.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
i18next:
|
||||
specifier: 25.1.3
|
||||
version: 25.1.3(typescript@5.8.3)
|
||||
specifier: 25.2.1
|
||||
version: 25.2.1(typescript@5.8.3)
|
||||
jotai:
|
||||
specifier: 2.12.5
|
||||
version: 2.12.5(@types/react@19.1.6)(react@19.1.0)
|
||||
@@ -283,13 +283,13 @@ importers:
|
||||
version: 0.4.0
|
||||
material-react-table:
|
||||
specifier: npm:@greenhat616/material-react-table@4.0.0
|
||||
version: '@greenhat616/material-react-table@4.0.0(46b43aaadf50e558876c4faea3b839ba)'
|
||||
version: '@greenhat616/material-react-table@4.0.0(b7389f75ebdae8b833bc168978d25e62)'
|
||||
monaco-editor:
|
||||
specifier: 0.52.2
|
||||
version: 0.52.2
|
||||
mui-color-input:
|
||||
specifier: 7.0.0
|
||||
version: 7.0.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
version: 7.0.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react:
|
||||
specifier: 19.1.0
|
||||
version: 19.1.0
|
||||
@@ -304,10 +304,10 @@ importers:
|
||||
version: 1.6.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react-hook-form-mui:
|
||||
specifier: 7.6.1
|
||||
version: 7.6.1(0d9426b029267c539e2114f08ae32263)
|
||||
version: 7.6.1(5cca61e2899c996b518d738106f3b6cc)
|
||||
react-i18next:
|
||||
specifier: 15.5.2
|
||||
version: 15.5.2(i18next@25.1.3(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
|
||||
version: 15.5.2(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
|
||||
react-markdown:
|
||||
specifier: 10.1.0
|
||||
version: 10.1.0(@types/react@19.1.6)(react@19.1.0)
|
||||
@@ -337,14 +337,14 @@ importers:
|
||||
specifier: 11.14.0
|
||||
version: 11.14.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@iconify/json':
|
||||
specifier: 2.2.343
|
||||
version: 2.2.343
|
||||
specifier: 2.2.345
|
||||
version: 2.2.345
|
||||
'@monaco-editor/react':
|
||||
specifier: 4.7.0
|
||||
version: 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/react-query':
|
||||
specifier: 5.76.2
|
||||
version: 5.76.2(react@19.1.0)
|
||||
specifier: 5.79.0
|
||||
version: 5.79.0(react@19.1.0)
|
||||
'@tanstack/react-router':
|
||||
specifier: 1.120.13
|
||||
version: 1.120.13(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -457,14 +457,14 @@ importers:
|
||||
specifier: 0.3.0
|
||||
version: 0.3.0
|
||||
'@mui/icons-material':
|
||||
specifier: 7.1.0
|
||||
version: 7.1.0(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
specifier: 7.1.1
|
||||
version: 7.1.1(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/lab':
|
||||
specifier: 7.0.0-beta.12
|
||||
version: 7.0.0-beta.12(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 7.0.0-beta.13
|
||||
version: 7.0.0-beta.13(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material':
|
||||
specifier: 7.1.0
|
||||
version: 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 7.1.1
|
||||
version: 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@radix-ui/react-portal':
|
||||
specifier: 1.1.9
|
||||
version: 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -490,8 +490,8 @@ importers:
|
||||
specifier: 7.9.0
|
||||
version: 7.9.0
|
||||
framer-motion:
|
||||
specifier: 12.11.4
|
||||
version: 12.11.4(@emotion/is-prop-valid@1.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 12.15.0
|
||||
version: 12.15.0(@emotion/is-prop-valid@1.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react:
|
||||
specifier: 19.1.0
|
||||
version: 19.1.0
|
||||
@@ -503,7 +503,7 @@ importers:
|
||||
version: 6.0.0(react@19.1.0)
|
||||
react-i18next:
|
||||
specifier: 15.5.2
|
||||
version: 15.5.2(i18next@25.1.3(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
|
||||
version: 15.5.2(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
|
||||
react-use:
|
||||
specifier: 17.6.0
|
||||
version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -1648,8 +1648,8 @@ packages:
|
||||
'@vue/compiler-sfc':
|
||||
optional: true
|
||||
|
||||
'@iconify/json@2.2.343':
|
||||
resolution: {integrity: sha512-wrfNXXKI33qIQbUQJqkaXqojFr380HNghKechO9X0g3UM950kn0Rdi+3Qy75VB0raMh2VQ0S3Dwz8qOaPeVLJw==}
|
||||
'@iconify/json@2.2.345':
|
||||
resolution: {integrity: sha512-cWcTkpSw42OcltXXlLRMp4bnoFEMvEXEIZDPazqqpT7nr4dPN/ztEqOk6T3z0fXrN2E3OEgW0GnHlQqZz4qDgw==}
|
||||
|
||||
'@iconify/types@2.0.0':
|
||||
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
|
||||
@@ -1718,28 +1718,28 @@ packages:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
|
||||
'@mui/core-downloads-tracker@7.1.0':
|
||||
resolution: {integrity: sha512-E0OqhZv548Qdc0PwWhLVA2zmjJZSTvaL4ZhoswmI8NJEC1tpW2js6LLP827jrW9MEiXYdz3QS6+hask83w74yQ==}
|
||||
'@mui/core-downloads-tracker@7.1.1':
|
||||
resolution: {integrity: sha512-yBckQs4aQ8mqukLnPC6ivIRv6guhaXi8snVl00VtyojBbm+l6VbVhyTSZ68Abcx7Ah8B+GZhrB7BOli+e+9LkQ==}
|
||||
|
||||
'@mui/icons-material@7.1.0':
|
||||
resolution: {integrity: sha512-1mUPMAZ+Qk3jfgL5ftRR06ATH/Esi0izHl1z56H+df6cwIlCWG66RXciUqeJCttbOXOQ5y2DCjLZI/4t3Yg3LA==}
|
||||
'@mui/icons-material@7.1.1':
|
||||
resolution: {integrity: sha512-X37+Yc8QpEnl0sYmz+WcLFy2dWgNRzbswDzLPXG7QU1XDVlP5TPp1HXjdmCupOWLL/I9m1fyhcyZl8/HPpp/Cg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@mui/material': ^7.1.0
|
||||
'@mui/material': ^7.1.1
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
peerDependenciesMeta:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/lab@7.0.0-beta.12':
|
||||
resolution: {integrity: sha512-685MmzByCy3Vmb7xI6J8qOQm4l7yqfVTOLwxVmNV1EHBKuJiMuoX4/2vAAEGfNbDeEfWQsp7aBWanYpSWe1iRA==}
|
||||
'@mui/lab@7.0.0-beta.13':
|
||||
resolution: {integrity: sha512-wLSeePenug3+/kek4cFMIF3QZVC2fHt2Z3O3HwOFvakgErmT39WltYsNpWNojCnXUqcIExUp9xNW0Wk+tJShgA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@emotion/react': ^11.5.0
|
||||
'@emotion/styled': ^11.3.0
|
||||
'@mui/material': ^7.1.0
|
||||
'@mui/material-pigment-css': ^7.1.0
|
||||
'@mui/material': ^7.1.1
|
||||
'@mui/material-pigment-css': ^7.1.1
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
@@ -1753,13 +1753,13 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/material@7.1.0':
|
||||
resolution: {integrity: sha512-ahUJdrhEv+mCp4XHW+tHIEYzZMSRLg8z4AjUOsj44QpD1ZaMxQoVOG2xiHvLFdcsIPbgSRx1bg1eQSheHBgvtg==}
|
||||
'@mui/material@7.1.1':
|
||||
resolution: {integrity: sha512-mTpdmdZCaHCGOH3SrYM41+XKvNL0iQfM9KlYgpSjgadXx/fEKhhvOktxm8++Xw6FFeOHoOiV+lzOI8X1rsv71A==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@emotion/react': ^11.5.0
|
||||
'@emotion/styled': ^11.3.0
|
||||
'@mui/material-pigment-css': ^7.1.0
|
||||
'@mui/material-pigment-css': ^7.1.1
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
@@ -1773,8 +1773,8 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/private-theming@7.1.0':
|
||||
resolution: {integrity: sha512-4Kck4jxhqF6YxNwJdSae1WgDfXVg0lIH6JVJ7gtuFfuKcQCgomJxPvUEOySTFRPz1IZzwz5OAcToskRdffElDA==}
|
||||
'@mui/private-theming@7.1.1':
|
||||
resolution: {integrity: sha512-M8NbLUx+armk2ZuaxBkkMk11ultnWmrPlN0Xe3jUEaBChg/mcxa5HWIWS1EE4DF36WRACaAHVAvyekWlDQf0PQ==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
@@ -1783,8 +1783,8 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/styled-engine@7.1.0':
|
||||
resolution: {integrity: sha512-m0mJ0c6iRC+f9hMeRe0W7zZX1wme3oUX0+XTVHjPG7DJz6OdQ6K/ggEOq7ZdwilcpdsDUwwMfOmvO71qDkYd2w==}
|
||||
'@mui/styled-engine@7.1.1':
|
||||
resolution: {integrity: sha512-R2wpzmSN127j26HrCPYVQ53vvMcT5DaKLoWkrfwUYq3cYytL6TQrCH8JBH3z79B6g4nMZZVoaXrxO757AlShaw==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@emotion/react': ^11.4.1
|
||||
@@ -1796,8 +1796,8 @@ packages:
|
||||
'@emotion/styled':
|
||||
optional: true
|
||||
|
||||
'@mui/system@7.1.0':
|
||||
resolution: {integrity: sha512-iedAWgRJMCxeMHvkEhsDlbvkK+qKf9me6ofsf7twk/jfT4P1ImVf7Rwb5VubEA0sikrVL+1SkoZM41M4+LNAVA==}
|
||||
'@mui/system@7.1.1':
|
||||
resolution: {integrity: sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@emotion/react': ^11.5.0
|
||||
@@ -1820,6 +1820,14 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/types@7.4.3':
|
||||
resolution: {integrity: sha512-2UCEiK29vtiZTeLdS2d4GndBKacVyxGvReznGXGr+CzW/YhjIX+OHUdCIczZjzcRAgKBGmE9zCIgoV9FleuyRQ==}
|
||||
peerDependencies:
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
peerDependenciesMeta:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/utils@7.1.0':
|
||||
resolution: {integrity: sha512-/OM3S8kSHHmWNOP+NH9xEtpYSG10upXeQ0wLZnfDgmgadTAk5F4MQfFLyZ5FCRJENB3eRzltMmaNl6UtDnPovw==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
@@ -1830,6 +1838,16 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/utils@7.1.1':
|
||||
resolution: {integrity: sha512-BkOt2q7MBYl7pweY2JWwfrlahhp+uGLR8S+EhiyRaofeRYUWL2YKbSGQvN4hgSN1i8poN0PaUiii1kEMrchvzg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
peerDependenciesMeta:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/x-date-pickers@8.5.0':
|
||||
resolution: {integrity: sha512-pnivJhAopuu6C4uWbEEg7b8kDdPc7Ad0ANrlDzx4qZGUj9vFcc6n+hT7/kOFnn9uceszQmb07e3Ud+g/d8Z4vg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
@@ -2736,11 +2754,11 @@ packages:
|
||||
resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@tanstack/query-core@5.76.2':
|
||||
resolution: {integrity: sha512-PFGwWh5ss9cJQ67l6bZ7hqXbisX2gy13G2jP+VGY1bgdbCfOMWh6UBVnN62QbFXro6CCoX9hYzTnZHr6Rz00YQ==}
|
||||
'@tanstack/query-core@5.79.0':
|
||||
resolution: {integrity: sha512-s+epTqqLM0/TbJzMAK7OEhZIzh63P9sWz5HEFc5XHL4FvKQXQkcjI8F3nee+H/xVVn7mrP610nVXwOytTSYd0w==}
|
||||
|
||||
'@tanstack/react-query@5.76.2':
|
||||
resolution: {integrity: sha512-rGkWberCrFdIxMdvSAJM/UOKeu0O/JVTbMmfhQoJpiU9Uq0EDx2EMCadnNuJWbXR4smDA2t7DY3NKkYFmDVS5A==}
|
||||
'@tanstack/react-query@5.79.0':
|
||||
resolution: {integrity: sha512-DjC4JIYZnYzxaTzbg3osOU63VNLP67dOrWet2cZvXgmgwAXNxfS52AMq86M5++ILuzW+BqTUEVMTjhrZ7/XBuA==}
|
||||
peerDependencies:
|
||||
react: ^18 || ^19
|
||||
|
||||
@@ -4793,8 +4811,8 @@ packages:
|
||||
fraction.js@4.3.7:
|
||||
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
|
||||
|
||||
framer-motion@12.11.4:
|
||||
resolution: {integrity: sha512-kyE5oWZCUxhDb7LtpEyyadNThJJvoE8a6bfUTBqz++zw3XxDOosPAvw1lqNhYbjOgy57YuAlJ5qG/Cx5BigiEQ==}
|
||||
framer-motion@12.15.0:
|
||||
resolution: {integrity: sha512-XKg/LnKExdLGugZrDILV7jZjI599785lDIJZLxMiiIFidCsy0a4R2ZEf+Izm67zyOuJgQYTHOmodi7igQsw3vg==}
|
||||
peerDependencies:
|
||||
'@emotion/is-prop-valid': '*'
|
||||
react: ^18.0.0 || ^19.0.0
|
||||
@@ -5106,8 +5124,8 @@ packages:
|
||||
hyphenate-style-name@1.1.0:
|
||||
resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
|
||||
|
||||
i18next@25.1.3:
|
||||
resolution: {integrity: sha512-VY1iKox3YWPRTNMHFdgk5TV+Jq6rNKexLCLpPmP5oXXJ5Kl7yDBi3ycZ5fyEKZ1tNBW5gOqD4WV0XqE7rl3JUg==}
|
||||
i18next@25.2.1:
|
||||
resolution: {integrity: sha512-+UoXK5wh+VlE1Zy5p6MjcvctHXAhRwQKCxiJD8noKZzIXmnAX8gdHX5fLPA3MEVxEN4vbZkQFy8N0LyD9tUqPw==}
|
||||
peerDependencies:
|
||||
typescript: ^5
|
||||
peerDependenciesMeta:
|
||||
@@ -6054,11 +6072,11 @@ packages:
|
||||
peerDependencies:
|
||||
monaco-editor: '>=0.36'
|
||||
|
||||
motion-dom@12.11.4:
|
||||
resolution: {integrity: sha512-1z/qYsrDjSx5QjOH8GfJ2RfFBvEzI2gdAEt2zNW+f7QkLlqjM3sQieESJr5+QtVmvD81qPANM7t97ROixKIt9Q==}
|
||||
motion-dom@12.15.0:
|
||||
resolution: {integrity: sha512-D2ldJgor+2vdcrDtKJw48k3OddXiZN1dDLLWrS8kiHzQdYVruh0IoTwbJBslrnTXIPgFED7PBN2Zbwl7rNqnhA==}
|
||||
|
||||
motion-utils@12.9.4:
|
||||
resolution: {integrity: sha512-BW3I65zeM76CMsfh3kHid9ansEJk9Qvl+K5cu4DVHKGsI52n76OJ4z2CUJUV+Mn3uEP9k1JJA3tClG0ggSrRcg==}
|
||||
motion-utils@12.12.1:
|
||||
resolution: {integrity: sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w==}
|
||||
|
||||
ms@2.0.0:
|
||||
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
|
||||
@@ -9342,13 +9360,13 @@ snapshots:
|
||||
|
||||
'@fastify/busboy@2.1.1': {}
|
||||
|
||||
'@greenhat616/material-react-table@4.0.0(46b43aaadf50e558876c4faea3b839ba)':
|
||||
'@greenhat616/material-react-table@4.0.0(b7389f75ebdae8b833bc168978d25e62)':
|
||||
dependencies:
|
||||
'@emotion/react': 11.14.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/icons-material': 7.1.0(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/material': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/x-date-pickers': 8.5.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/icons-material': 7.1.1(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/material': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/x-date-pickers': 8.5.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/match-sorter-utils': 8.19.4
|
||||
'@tanstack/react-table': 8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/react-virtual': 3.13.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -9382,7 +9400,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@iconify/json@2.2.343':
|
||||
'@iconify/json@2.2.345':
|
||||
dependencies:
|
||||
'@iconify/types': 2.0.0
|
||||
pathe: 1.1.2
|
||||
@@ -9491,23 +9509,23 @@ snapshots:
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
|
||||
'@mui/core-downloads-tracker@7.1.0': {}
|
||||
'@mui/core-downloads-tracker@7.1.1': {}
|
||||
|
||||
'@mui/icons-material@7.1.0(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)':
|
||||
'@mui/icons-material@7.1.1(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@mui/material': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react: 19.1.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@mui/lab@7.0.0-beta.12(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
'@mui/lab@7.0.0-beta.13(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@mui/material': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/system': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/types': 7.4.2(@types/react@19.1.6)
|
||||
'@mui/utils': 7.1.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/material': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/types': 7.4.3(@types/react@19.1.6)
|
||||
'@mui/utils': 7.1.1(@types/react@19.1.6)(react@19.1.0)
|
||||
clsx: 2.1.1
|
||||
prop-types: 15.8.1
|
||||
react: 19.1.0
|
||||
@@ -9517,13 +9535,13 @@ snapshots:
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
'@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@mui/core-downloads-tracker': 7.1.0
|
||||
'@mui/system': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/types': 7.4.2(@types/react@19.1.6)
|
||||
'@mui/utils': 7.1.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/core-downloads-tracker': 7.1.1
|
||||
'@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/types': 7.4.3(@types/react@19.1.6)
|
||||
'@mui/utils': 7.1.1(@types/react@19.1.6)(react@19.1.0)
|
||||
'@popperjs/core': 2.11.8
|
||||
'@types/react-transition-group': 4.4.12(@types/react@19.1.6)
|
||||
clsx: 2.1.1
|
||||
@@ -9538,16 +9556,16 @@ snapshots:
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@mui/private-theming@7.1.0(@types/react@19.1.6)(react@19.1.0)':
|
||||
'@mui/private-theming@7.1.1(@types/react@19.1.6)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@mui/utils': 7.1.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/utils': 7.1.1(@types/react@19.1.6)(react@19.1.0)
|
||||
prop-types: 15.8.1
|
||||
react: 19.1.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@mui/styled-engine@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(react@19.1.0)':
|
||||
'@mui/styled-engine@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@emotion/cache': 11.14.0
|
||||
@@ -9560,13 +9578,13 @@ snapshots:
|
||||
'@emotion/react': 11.14.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
|
||||
'@mui/system@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)':
|
||||
'@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@mui/private-theming': 7.1.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/styled-engine': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(react@19.1.0)
|
||||
'@mui/types': 7.4.2(@types/react@19.1.6)
|
||||
'@mui/utils': 7.1.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/private-theming': 7.1.1(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/styled-engine': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(react@19.1.0)
|
||||
'@mui/types': 7.4.3(@types/react@19.1.6)
|
||||
'@mui/utils': 7.1.1(@types/react@19.1.6)(react@19.1.0)
|
||||
clsx: 2.1.1
|
||||
csstype: 3.1.3
|
||||
prop-types: 15.8.1
|
||||
@@ -9582,6 +9600,12 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@mui/types@7.4.3(@types/react@19.1.6)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
optionalDependencies:
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@mui/utils@7.1.0(@types/react@19.1.6)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
@@ -9594,13 +9618,25 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@mui/x-date-pickers@8.5.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
'@mui/utils@7.1.1(@types/react@19.1.6)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@mui/material': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/system': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/types': 7.4.3(@types/react@19.1.6)
|
||||
'@types/prop-types': 15.7.14
|
||||
clsx: 2.1.1
|
||||
prop-types: 15.8.1
|
||||
react: 19.1.0
|
||||
react-is: 19.1.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@mui/x-date-pickers@8.5.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@mui/material': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/utils': 7.1.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/x-internals': 8.5.0(@mui/system@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/x-internals': 8.5.0(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@types/react-transition-group': 4.4.12(@types/react@19.1.6)
|
||||
clsx: 2.1.1
|
||||
prop-types: 15.8.1
|
||||
@@ -9614,10 +9650,10 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- '@types/react'
|
||||
|
||||
'@mui/x-internals@8.5.0(@mui/system@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)':
|
||||
'@mui/x-internals@8.5.0(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
'@mui/system': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/utils': 7.1.0(@types/react@19.1.6)(react@19.1.0)
|
||||
react: 19.1.0
|
||||
transitivePeerDependencies:
|
||||
@@ -10413,11 +10449,11 @@ snapshots:
|
||||
dependencies:
|
||||
remove-accents: 0.5.0
|
||||
|
||||
'@tanstack/query-core@5.76.2': {}
|
||||
'@tanstack/query-core@5.79.0': {}
|
||||
|
||||
'@tanstack/react-query@5.76.2(react@19.1.0)':
|
||||
'@tanstack/react-query@5.79.0(react@19.1.0)':
|
||||
dependencies:
|
||||
'@tanstack/query-core': 5.76.2
|
||||
'@tanstack/query-core': 5.79.0
|
||||
react: 19.1.0
|
||||
|
||||
'@tanstack/react-router-devtools@1.120.13(@tanstack/react-router@1.120.13(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.120.13)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tiny-invariant@1.3.3)':
|
||||
@@ -12856,10 +12892,10 @@ snapshots:
|
||||
|
||||
fraction.js@4.3.7: {}
|
||||
|
||||
framer-motion@12.11.4(@emotion/is-prop-valid@1.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
||||
framer-motion@12.15.0(@emotion/is-prop-valid@1.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
||||
dependencies:
|
||||
motion-dom: 12.11.4
|
||||
motion-utils: 12.9.4
|
||||
motion-dom: 12.15.0
|
||||
motion-utils: 12.12.1
|
||||
tslib: 2.8.1
|
||||
optionalDependencies:
|
||||
'@emotion/is-prop-valid': 1.3.0
|
||||
@@ -13251,7 +13287,7 @@ snapshots:
|
||||
|
||||
hyphenate-style-name@1.1.0: {}
|
||||
|
||||
i18next@25.1.3(typescript@5.8.3):
|
||||
i18next@25.2.1(typescript@5.8.3):
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
optionalDependencies:
|
||||
@@ -14249,11 +14285,11 @@ snapshots:
|
||||
vscode-uri: 3.0.8
|
||||
yaml: 2.7.0
|
||||
|
||||
motion-dom@12.11.4:
|
||||
motion-dom@12.15.0:
|
||||
dependencies:
|
||||
motion-utils: 12.9.4
|
||||
motion-utils: 12.12.1
|
||||
|
||||
motion-utils@12.9.4: {}
|
||||
motion-utils@12.12.1: {}
|
||||
|
||||
ms@2.0.0: {}
|
||||
|
||||
@@ -14261,12 +14297,12 @@ snapshots:
|
||||
|
||||
muggle-string@0.4.1: {}
|
||||
|
||||
mui-color-input@7.0.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
||||
mui-color-input@7.0.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
||||
dependencies:
|
||||
'@ctrl/tinycolor': 4.1.0
|
||||
'@emotion/react': 11.14.0(@types/react@19.1.6)(react@19.1.0)
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/material': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
optionalDependencies:
|
||||
@@ -14844,24 +14880,24 @@ snapshots:
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
|
||||
react-hook-form-mui@7.6.1(0d9426b029267c539e2114f08ae32263):
|
||||
react-hook-form-mui@7.6.1(5cca61e2899c996b518d738106f3b6cc):
|
||||
dependencies:
|
||||
'@mui/material': 7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react: 19.1.0
|
||||
react-hook-form: 7.52.1(react@19.1.0)
|
||||
optionalDependencies:
|
||||
'@mui/icons-material': 7.1.0(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/x-date-pickers': 8.5.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/icons-material': 7.1.1(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)
|
||||
'@mui/x-date-pickers': 8.5.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
|
||||
react-hook-form@7.52.1(react@19.1.0):
|
||||
dependencies:
|
||||
react: 19.1.0
|
||||
|
||||
react-i18next@15.5.2(i18next@25.1.3(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3):
|
||||
react-i18next@15.5.2(i18next@25.2.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3):
|
||||
dependencies:
|
||||
'@babel/runtime': 7.27.1
|
||||
html-parse-stringify: 3.0.1
|
||||
i18next: 25.1.3(typescript@5.8.3)
|
||||
i18next: 25.2.1(typescript@5.8.3)
|
||||
react: 19.1.0
|
||||
optionalDependencies:
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
|
||||
+143
-144
@@ -1,123 +1,136 @@
|
||||
name: Alpha Build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# UTC+8 0,6,12,18
|
||||
- cron: "0 16,22,4,10 * * *"
|
||||
# 因为 alpha 不再负责频繁构建,且需要相对于 autobuild 更稳定使用环境
|
||||
# 所以不再使用 workflow_dispatch 触发
|
||||
# 应当通过 git tag 来触发构建
|
||||
# workflow_dispatch:
|
||||
push:
|
||||
tags:
|
||||
- "v*.*.*-alpha*"
|
||||
permissions: write-all
|
||||
env:
|
||||
TAG_NAME: alpha
|
||||
TAG_CHANNEL: Alpha
|
||||
CARGO_INCREMENTAL: 0
|
||||
RUST_BACKTRACE: short
|
||||
concurrency:
|
||||
# only allow per workflow per commit (and not pr) to run at a time
|
||||
group: "${{ github.workflow }} - ${{ github.head_ref || github.ref }}"
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
jobs:
|
||||
check_commit:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
should_run: ${{ steps.check.outputs.should_run }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Check if version changed or src changed
|
||||
id: check
|
||||
run: |
|
||||
# For manual workflow_dispatch, always run
|
||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||
echo "should_run=true" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Store current version from package.json
|
||||
CURRENT_VERSION=$(cat package.json | jq -r '.version')
|
||||
echo "Current version: $CURRENT_VERSION"
|
||||
|
||||
# Get the previous commit's package.json version
|
||||
git checkout HEAD~1 package.json
|
||||
PREVIOUS_VERSION=$(cat package.json | jq -r '.version')
|
||||
echo "Previous version: $PREVIOUS_VERSION"
|
||||
|
||||
# Reset back to current commit
|
||||
git checkout HEAD package.json
|
||||
|
||||
# Check if version changed
|
||||
if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
|
||||
echo "Version changed from $PREVIOUS_VERSION to $CURRENT_VERSION"
|
||||
echo "should_run=true" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check if src or src-tauri directories changed
|
||||
CURRENT_SRC_HASH=$(git rev-parse HEAD:src)
|
||||
PREVIOUS_SRC_HASH=$(git rev-parse HEAD~1:src 2>/dev/null || echo "")
|
||||
CURRENT_TAURI_HASH=$(git rev-parse HEAD:src-tauri 2>/dev/null || echo "")
|
||||
PREVIOUS_TAURI_HASH=$(git rev-parse HEAD~1:src-tauri 2>/dev/null || echo "")
|
||||
|
||||
echo "Current src hash: $CURRENT_SRC_HASH"
|
||||
echo "Previous src hash: $PREVIOUS_SRC_HASH"
|
||||
echo "Current tauri hash: $CURRENT_TAURI_HASH"
|
||||
echo "Previous tauri hash: $PREVIOUS_TAURI_HASH"
|
||||
|
||||
if [ "$CURRENT_SRC_HASH" != "$PREVIOUS_SRC_HASH" ] || [ "$CURRENT_TAURI_HASH" != "$PREVIOUS_TAURI_HASH" ]; then
|
||||
echo "Source directories changed"
|
||||
echo "should_run=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "Version and source directories unchanged"
|
||||
echo "should_run=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
delete_old_assets:
|
||||
needs: check_commit
|
||||
if: ${{ needs.check_commit.outputs.should_run == 'true' }}
|
||||
name: Delete Old Alpha Release Assets and Tags
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Delete Old Alpha Release Assets
|
||||
- name: Delete Old Alpha Tags Except Latest
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const releaseTag = 'alpha';
|
||||
const tagPattern = /-alpha.*/; // 匹配带有 -alpha 的 tag
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
|
||||
try {
|
||||
// Get the release by tag name
|
||||
const { data: release } = await github.rest.repos.getReleaseByTag({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
tag: releaseTag
|
||||
// 获取所有 tag
|
||||
const { data: tags } = await github.rest.repos.listTags({
|
||||
owner,
|
||||
repo,
|
||||
per_page: 100 // 调整 per_page 以获取更多 tag
|
||||
});
|
||||
|
||||
console.log(`Found release with ID: ${release.id}`);
|
||||
// 过滤出包含 -alpha 的 tag
|
||||
const alphaTags = (await Promise.all(
|
||||
tags
|
||||
.filter(tag => tagPattern.test(tag.name))
|
||||
.map(async tag => {
|
||||
// 获取每个 tag 的 commit 信息以获得日期
|
||||
const { data: commit } = await github.rest.repos.getCommit({
|
||||
owner,
|
||||
repo,
|
||||
ref: tag.commit.sha
|
||||
});
|
||||
return {
|
||||
...tag,
|
||||
commitDate: commit.committer && commit.committer.date ? commit.committer.date : commit.commit.author.date
|
||||
};
|
||||
})
|
||||
)).sort((a, b) => {
|
||||
// 按 commit 日期降序排序(最新的在前面)
|
||||
return new Date(b.commitDate) - new Date(a.commitDate);
|
||||
});
|
||||
|
||||
// Delete each asset
|
||||
if (release.assets && release.assets.length > 0) {
|
||||
console.log(`Deleting ${release.assets.length} assets`);
|
||||
console.log(`Found ${alphaTags.length} alpha tags`);
|
||||
|
||||
for (const asset of release.assets) {
|
||||
console.log(`Deleting asset: ${asset.name} (${asset.id})`);
|
||||
await github.rest.repos.deleteReleaseAsset({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
asset_id: asset.id
|
||||
if (alphaTags.length === 0) {
|
||||
console.log('No alpha tags found');
|
||||
return;
|
||||
}
|
||||
|
||||
// 保留最新的 tag
|
||||
const latestTag = alphaTags[0];
|
||||
console.log(`Keeping latest alpha tag: ${latestTag.name}`);
|
||||
|
||||
// 处理其他旧的 alpha tag
|
||||
for (const tag of alphaTags.slice(1)) {
|
||||
console.log(`Processing tag: ${tag.name}`);
|
||||
|
||||
// 获取与 tag 关联的 release
|
||||
try {
|
||||
const { data: release } = await github.rest.repos.getReleaseByTag({
|
||||
owner,
|
||||
repo,
|
||||
tag: tag.name
|
||||
});
|
||||
}
|
||||
|
||||
console.log('All assets deleted successfully');
|
||||
} else {
|
||||
console.log('No assets found to delete');
|
||||
// 删除 release 下的所有资产
|
||||
if (release.assets && release.assets.length > 0) {
|
||||
console.log(`Deleting ${release.assets.length} assets for release ${tag.name}`);
|
||||
for (const asset of release.assets) {
|
||||
console.log(`Deleting asset: ${asset.name} (${asset.id})`);
|
||||
await github.rest.repos.deleteReleaseAsset({
|
||||
owner,
|
||||
repo,
|
||||
asset_id: asset.id
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 删除 release
|
||||
console.log(`Deleting release for tag: ${tag.name}`);
|
||||
await github.rest.repos.deleteRelease({
|
||||
owner,
|
||||
repo,
|
||||
release_id: release.id
|
||||
});
|
||||
|
||||
// 删除 tag
|
||||
console.log(`Deleting tag: ${tag.name}`);
|
||||
await github.rest.git.deleteRef({
|
||||
owner,
|
||||
repo,
|
||||
ref: `tags/${tag.name}`
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
if (error.status === 404) {
|
||||
console.log(`No release found for tag ${tag.name}, deleting tag directly`);
|
||||
await github.rest.git.deleteRef({
|
||||
owner,
|
||||
repo,
|
||||
ref: `tags/${tag.name}`
|
||||
});
|
||||
} else {
|
||||
console.error(`Error processing tag ${tag.name}:`, error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log('Old alpha tags and releases deleted successfully');
|
||||
} catch (error) {
|
||||
if (error.status === 404) {
|
||||
console.log('Release not found, nothing to delete');
|
||||
} else {
|
||||
console.error('Error:', error);
|
||||
throw error;
|
||||
}
|
||||
console.error('Error:', error);
|
||||
throw error;
|
||||
}
|
||||
|
||||
update_tag:
|
||||
@@ -128,22 +141,18 @@ jobs:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Fetch Alpha update logs
|
||||
id: fetch_alpha_logs
|
||||
- name: Fetch UPDATE logs
|
||||
id: fetch_update_logs
|
||||
run: |
|
||||
# Check if UPDATELOG.md exists
|
||||
if [ -f "UPDATELOG.md" ]; then
|
||||
# Extract the section starting with ## and containing -alpha until the next ## or end of file
|
||||
# ALPHA_LOGS=$(awk '/^## .*-alpha/{flag=1; print; next} /^## /{flag=0} flag' UPDATELOG.md)
|
||||
ALPHA_LOGS=$(awk '/^## v/{if(flag) exit; flag=1} flag' UPDATELOG.md)
|
||||
|
||||
if [ -n "$ALPHA_LOGS" ]; then
|
||||
echo "Found alpha update logs"
|
||||
echo "ALPHA_LOGS<<EOF" >> $GITHUB_ENV
|
||||
echo "$ALPHA_LOGS" >> $GITHUB_ENV
|
||||
UPDATE_LOGS=$(awk '/^## v/{if(flag) exit; flag=1} flag' UPDATELOG.md)
|
||||
if [ -n "$UPDATE_LOGS" ]; then
|
||||
echo "Found update logs"
|
||||
echo "UPDATE_LOGS<<EOF" >> $GITHUB_ENV
|
||||
echo "$UPDATE_LOGS" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
else
|
||||
echo "No alpha sections found in UPDATELOG.md"
|
||||
echo "No update sections found in UPDATELOG.md"
|
||||
fi
|
||||
else
|
||||
echo "UPDATELOG.md file not found"
|
||||
@@ -156,17 +165,15 @@ jobs:
|
||||
shell: bash
|
||||
|
||||
- run: |
|
||||
# 检查 ALPHA_LOGS 是否存在,如果不存在则使用默认消息
|
||||
if [ -z "$ALPHA_LOGS" ]; then
|
||||
echo "No alpha logs found, using default message"
|
||||
ALPHA_LOGS="More new features are now supported. Check for detailed changelog soon."
|
||||
if [ -z "$UPDATE_LOGS" ]; then
|
||||
echo "No update logs found, using default message"
|
||||
UPDATE_LOGS="More new features are now supported. Check for detailed changelog soon."
|
||||
else
|
||||
echo "Using found alpha logs"
|
||||
echo "Using found update logs"
|
||||
fi
|
||||
|
||||
# 生成 release.txt 文件
|
||||
cat > release.txt << EOF
|
||||
$ALPHA_LOGS
|
||||
$UPDATE_LOGS
|
||||
|
||||
## 我应该下载哪个版本?
|
||||
|
||||
@@ -189,7 +196,6 @@ jobs:
|
||||
- arm64架构: arm64_fixed_webview2-setup.exe
|
||||
|
||||
### FAQ
|
||||
|
||||
- [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
|
||||
|
||||
### 稳定机场VPN推荐
|
||||
@@ -201,14 +207,15 @@ jobs:
|
||||
- name: Upload Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: alpha
|
||||
name: "Clash Verge Rev Alpha"
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
|
||||
body_path: release.txt
|
||||
prerelease: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
generate_release_notes: true
|
||||
|
||||
alpha:
|
||||
alpha-x86-windows-macos-linux:
|
||||
name: Alpha x86 Windows, MacOS and Linux
|
||||
needs: update_tag
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -224,7 +231,6 @@ jobs:
|
||||
target: x86_64-apple-darwin
|
||||
- os: ubuntu-22.04
|
||||
target: x86_64-unknown-linux-gnu
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
@@ -264,11 +270,8 @@ jobs:
|
||||
pnpm i
|
||||
pnpm check ${{ matrix.target }}
|
||||
|
||||
- name: Release Alpha Version
|
||||
run: pnpm release-alpha-version
|
||||
|
||||
- name: Patch Alpha Hash
|
||||
run: pnpm fix-alpha-version
|
||||
# - name: Release ${{ env.TAG_CHANNEL }} Version
|
||||
# run: pnpm release-version ${{ env.TAG_NAME }}
|
||||
|
||||
- name: Tauri build
|
||||
uses: tauri-apps/tauri-action@v0
|
||||
@@ -284,15 +287,16 @@ jobs:
|
||||
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
with:
|
||||
tagName: alpha
|
||||
releaseName: "Clash Verge Rev Alpha"
|
||||
tagName: ${{ env.TAG_NAME }}
|
||||
releaseName: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
|
||||
releaseBody: "More new features are now supported."
|
||||
releaseDraft: false
|
||||
prerelease: true
|
||||
tauriScript: pnpm
|
||||
args: --target ${{ matrix.target }}
|
||||
|
||||
alpha-for-linux-arm:
|
||||
alpha-arm-linux:
|
||||
name: Alpha ARM Linux
|
||||
needs: update_tag
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -336,14 +340,11 @@ jobs:
|
||||
pnpm i
|
||||
pnpm check ${{ matrix.target }}
|
||||
|
||||
- name: Release Alpha Version
|
||||
run: pnpm release-alpha-version
|
||||
# - name: Release ${{ env.TAG_CHANNEL }} Version
|
||||
# run: pnpm release-version ${{ env.TAG_NAME }}
|
||||
|
||||
- name: Patch Alpha Hash
|
||||
run: pnpm fix-alpha-version
|
||||
|
||||
- name: "Setup for linux"
|
||||
run: |-
|
||||
- name: Setup for linux
|
||||
run: |
|
||||
sudo ls -lR /etc/apt/
|
||||
|
||||
cat > /tmp/sources.list << EOF
|
||||
@@ -377,14 +378,14 @@ jobs:
|
||||
patchelf:${{ matrix.arch }} \
|
||||
librsvg2-dev:${{ matrix.arch }}
|
||||
|
||||
- name: "Install aarch64 tools"
|
||||
- name: Install aarch64 tools
|
||||
if: matrix.target == 'aarch64-unknown-linux-gnu'
|
||||
run: |
|
||||
sudo apt install -y \
|
||||
gcc-aarch64-linux-gnu \
|
||||
g++-aarch64-linux-gnu
|
||||
|
||||
- name: "Install armv7 tools"
|
||||
- name: Install armv7 tools
|
||||
if: matrix.target == 'armv7-unknown-linux-gnueabihf'
|
||||
run: |
|
||||
sudo apt install -y \
|
||||
@@ -417,15 +418,16 @@ jobs:
|
||||
- name: Upload Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: alpha
|
||||
name: "Clash Verge Rev Alpha"
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
|
||||
prerelease: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
files: |
|
||||
src-tauri/target/${{ matrix.target }}/release/bundle/deb/*.deb
|
||||
src-tauri/target/${{ matrix.target }}/release/bundle/rpm/*.rpm
|
||||
|
||||
alpha-for-fixed-webview2:
|
||||
alpha-x86-arm-windows_webview2:
|
||||
name: Alpha x86 and ARM Windows with WebView2
|
||||
needs: update_tag
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -467,11 +469,8 @@ jobs:
|
||||
pnpm i
|
||||
pnpm check ${{ matrix.target }}
|
||||
|
||||
- name: Release Alpha Version
|
||||
run: pnpm release-alpha-version
|
||||
|
||||
- name: Patch Alpha Hash
|
||||
run: pnpm fix-alpha-version
|
||||
# - name: Release ${{ env.TAG_CHANNEL }} Version
|
||||
# run: pnpm release-version ${{ env.TAG_NAME }}
|
||||
|
||||
- name: Download WebView2 Runtime
|
||||
run: |
|
||||
@@ -515,13 +514,13 @@ jobs:
|
||||
- name: Upload Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: alpha
|
||||
name: "Clash Verge Rev Alpha"
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
|
||||
prerelease: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup*
|
||||
|
||||
- name: Portable Bundle
|
||||
run: pnpm portable-fixed-webview2 ${{ matrix.target }} --alpha
|
||||
run: pnpm portable-fixed-webview2 ${{ matrix.target }} --${{ env.TAG_NAME }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
+462
@@ -0,0 +1,462 @@
|
||||
name: Auto Build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# UTC+8 0,6,12,18
|
||||
- cron: "0 16,22,4,10 * * *"
|
||||
permissions: write-all
|
||||
env:
|
||||
TAG_NAME: autobuild
|
||||
TAG_CHANNEL: AutoBuild
|
||||
CARGO_INCREMENTAL: 0
|
||||
RUST_BACKTRACE: short
|
||||
concurrency:
|
||||
group: "${{ github.workflow }} - ${{ github.head_ref || github.ref }}"
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
jobs:
|
||||
check_commit:
|
||||
name: Check Commit Needs Build
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
should_run: ${{ steps.check.outputs.should_run }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Check if version changed or src changed
|
||||
id: check
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||
echo "should_run=true" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
CURRENT_VERSION=$(cat package.json | jq -r '.version')
|
||||
echo "Current version: $CURRENT_VERSION"
|
||||
|
||||
git checkout HEAD~1 package.json
|
||||
PREVIOUS_VERSION=$(cat package.json | jq -r '.version')
|
||||
echo "Previous version: $PREVIOUS_VERSION"
|
||||
|
||||
git checkout HEAD package.json
|
||||
|
||||
if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
|
||||
echo "Version changed from $PREVIOUS_VERSION to $CURRENT_VERSION"
|
||||
echo "should_run=true" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
CURRENT_SRC_HASH=$(git rev-parse HEAD:src)
|
||||
PREVIOUS_SRC_HASH=$(git rev-parse HEAD~1:src 2>/dev/null || echo "")
|
||||
CURRENT_TAURI_HASH=$(git rev-parse HEAD:src-tauri 2>/dev/null || echo "")
|
||||
PREVIOUS_TAURI_HASH=$(git rev-parse HEAD~1:src-tauri 2>/dev/null || echo "")
|
||||
|
||||
echo "Current src hash: $CURRENT_SRC_HASH"
|
||||
echo "Previous src hash: $PREVIOUS_SRC_HASH"
|
||||
echo "Current tauri hash: $CURRENT_TAURI_HASH"
|
||||
echo "Previous tauri hash: $PREVIOUS_TAURI_HASH"
|
||||
|
||||
if [ "$CURRENT_SRC_HASH" != "$PREVIOUS_SRC_HASH" ] || [ "$CURRENT_TAURI_HASH" != "$PREVIOUS_TAURI_HASH" ]; then
|
||||
echo "Source directories changed"
|
||||
echo "should_run=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "Version and source directories unchanged"
|
||||
echo "should_run=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
update_tag:
|
||||
name: Update tag
|
||||
runs-on: ubuntu-latest
|
||||
needs: check_commit
|
||||
if: ${{ needs.check_commit.outputs.should_run == 'true' }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Fetch UPDATE logs
|
||||
id: fetch_update_logs
|
||||
run: |
|
||||
if [ -f "UPDATELOG.md" ]; then
|
||||
UPDATE_LOGS=$(awk '/^## v/{if(flag) exit; flag=1} flag' UPDATELOG.md)
|
||||
if [ -n "$UPDATE_LOGS" ]; then
|
||||
echo "Found update logs"
|
||||
echo "UPDATE_LOGS<<EOF" >> $GITHUB_ENV
|
||||
echo "$UPDATE_LOGS" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
else
|
||||
echo "No update sections found in UPDATELOG.md"
|
||||
fi
|
||||
else
|
||||
echo "UPDATELOG.md file not found"
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: Set Env
|
||||
run: |
|
||||
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- run: |
|
||||
if [ -z "$UPDATE_LOGS" ]; then
|
||||
echo "No update logs found, using default message"
|
||||
UPDATE_LOGS="More new features are now supported. Check for detailed changelog soon."
|
||||
else
|
||||
echo "Using found update logs"
|
||||
fi
|
||||
|
||||
cat > release.txt << EOF
|
||||
$UPDATE_LOGS
|
||||
|
||||
## 我应该下载哪个版本?
|
||||
|
||||
### MacOS
|
||||
- MacOS intel芯片: x64.dmg
|
||||
- MacOS apple M芯片: aarch64.dmg
|
||||
|
||||
### Linux
|
||||
- Linux 64位: amd64.deb/amd64.rpm
|
||||
- Linux arm64 architecture: arm64.deb/aarch64.rpm
|
||||
- Linux armv7架构: armhf.deb/armhfp.rpm
|
||||
|
||||
### Windows (不再支持Win7)
|
||||
#### 正常版本(推荐)
|
||||
- 64位: x64-setup.exe
|
||||
- arm64架构: arm64-setup.exe
|
||||
#### 便携版问题很多不再提供
|
||||
#### 内置Webview2版(体积较大,仅在企业版系统或无法安装webview2时使用)
|
||||
- 64位: x64_fixed_webview2-setup.exe
|
||||
- arm64架构: arm64_fixed_webview2-setup.exe
|
||||
|
||||
### FAQ
|
||||
- [常见问题](https://clash-verge-rev.github.io/faq/windows.html)
|
||||
|
||||
### 稳定机场VPN推荐
|
||||
- [狗狗加速](https://verge.dginv.click/#/register?code=oaxsAGo6)
|
||||
|
||||
Created at ${{ env.BUILDTIME }}.
|
||||
EOF
|
||||
|
||||
- name: Upload Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
|
||||
body_path: release.txt
|
||||
prerelease: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
generate_release_notes: true
|
||||
|
||||
autobuild-x86-windows-macos-linux:
|
||||
name: Autobuild x86 Windows, MacOS and Linux
|
||||
needs: update_tag
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: windows-latest
|
||||
target: x86_64-pc-windows-msvc
|
||||
- os: windows-latest
|
||||
target: aarch64-pc-windows-msvc
|
||||
- os: macos-latest
|
||||
target: aarch64-apple-darwin
|
||||
- os: macos-latest
|
||||
target: x86_64-apple-darwin
|
||||
- os: ubuntu-22.04
|
||||
target: x86_64-unknown-linux-gnu
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Rust Stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Add Rust Target
|
||||
run: rustup target add ${{ matrix.target }}
|
||||
|
||||
- name: Rust Cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: src-tauri
|
||||
cache-all-crates: true
|
||||
cache-on-failure: true
|
||||
|
||||
- name: Install dependencies (ubuntu only)
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libxslt1.1 libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf
|
||||
|
||||
- name: Install Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "22"
|
||||
|
||||
- uses: pnpm/action-setup@v4
|
||||
name: Install pnpm
|
||||
with:
|
||||
run_install: false
|
||||
|
||||
- name: Pnpm install and check
|
||||
run: |
|
||||
pnpm i
|
||||
pnpm check ${{ matrix.target }}
|
||||
|
||||
- name: Release ${{ env.TAG_CHANNEL }} Version
|
||||
run: pnpm release-version ${{ env.TAG_NAME }}
|
||||
|
||||
- name: Tauri build
|
||||
uses: tauri-apps/tauri-action@v0
|
||||
env:
|
||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
||||
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
||||
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
with:
|
||||
tagName: ${{ env.TAG_NAME }}
|
||||
releaseName: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
|
||||
releaseBody: "More new features are now supported."
|
||||
releaseDraft: false
|
||||
prerelease: true
|
||||
tauriScript: pnpm
|
||||
args: --target ${{ matrix.target }}
|
||||
|
||||
autobuild-arm-linux:
|
||||
name: Autobuild ARM Linux
|
||||
needs: update_tag
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: ubuntu-22.04
|
||||
target: aarch64-unknown-linux-gnu
|
||||
arch: arm64
|
||||
- os: ubuntu-22.04
|
||||
target: armv7-unknown-linux-gnueabihf
|
||||
arch: armhf
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Rust Stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Add Rust Target
|
||||
run: rustup target add ${{ matrix.target }}
|
||||
|
||||
- name: Rust Cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: src-tauri
|
||||
cache-all-crates: true
|
||||
|
||||
- name: Install Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "22"
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
run_install: false
|
||||
|
||||
- name: Pnpm install and check
|
||||
run: |
|
||||
pnpm i
|
||||
pnpm check ${{ matrix.target }}
|
||||
|
||||
- name: Release ${{ env.TAG_CHANNEL }} Version
|
||||
run: pnpm release-version ${{ env.TAG_NAME }}
|
||||
|
||||
- name: Setup for linux
|
||||
run: |
|
||||
sudo ls -lR /etc/apt/
|
||||
|
||||
cat > /tmp/sources.list << EOF
|
||||
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy main multiverse universe restricted
|
||||
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-security main multiverse universe restricted
|
||||
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-updates main multiverse universe restricted
|
||||
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-backports main multiverse universe restricted
|
||||
|
||||
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy main multiverse universe restricted
|
||||
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main multiverse universe restricted
|
||||
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main multiverse universe restricted
|
||||
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-backports main multiverse universe restricted
|
||||
EOF
|
||||
|
||||
sudo mv /etc/apt/sources.list /etc/apt/sources.list.default
|
||||
sudo mv /tmp/sources.list /etc/apt/sources.list
|
||||
|
||||
sudo dpkg --add-architecture ${{ matrix.arch }}
|
||||
sudo apt-get update -y
|
||||
sudo apt-get -f install -y
|
||||
|
||||
sudo apt-get install -y \
|
||||
linux-libc-dev:${{ matrix.arch }} \
|
||||
libc6-dev:${{ matrix.arch }}
|
||||
|
||||
sudo apt-get install -y \
|
||||
libxslt1.1:${{ matrix.arch }} \
|
||||
libwebkit2gtk-4.1-dev:${{ matrix.arch }} \
|
||||
libayatana-appindicator3-dev:${{ matrix.arch }} \
|
||||
libssl-dev:${{ matrix.arch }} \
|
||||
patchelf:${{ matrix.arch }} \
|
||||
librsvg2-dev:${{ matrix.arch }}
|
||||
|
||||
- name: Install aarch64 tools
|
||||
if: matrix.target == 'aarch64-unknown-linux-gnu'
|
||||
run: |
|
||||
sudo apt install -y \
|
||||
gcc-aarch64-linux-gnu \
|
||||
g++-aarch64-linux-gnu
|
||||
|
||||
- name: Install armv7 tools
|
||||
if: matrix.target == 'armv7-unknown-linux-gnueabihf'
|
||||
run: |
|
||||
sudo apt install -y \
|
||||
gcc-arm-linux-gnueabihf \
|
||||
g++-arm-linux-gnueabihf
|
||||
|
||||
- name: Build for Linux
|
||||
run: |
|
||||
export PKG_CONFIG_ALLOW_CROSS=1
|
||||
if [ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]; then
|
||||
export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH
|
||||
export PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/
|
||||
elif [ "${{ matrix.target }}" == "armv7-unknown-linux-gnueabihf" ]; then
|
||||
export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig/:$PKG_CONFIG_PATH
|
||||
export PKG_CONFIG_SYSROOT_DIR=/usr/arm-linux-gnueabihf/
|
||||
fi
|
||||
pnpm build --target ${{ matrix.target }}
|
||||
env:
|
||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
||||
|
||||
- name: Get Version
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install jq
|
||||
echo "VERSION=$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
|
||||
prerelease: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
files: |
|
||||
src-tauri/target/${{ matrix.target }}/release/bundle/deb/*.deb
|
||||
src-tauri/target/${{ matrix.target }}/release/bundle/rpm/*.rpm
|
||||
|
||||
autobuild-x86-arm-windows_webview2:
|
||||
name: Autobuild x86 and ARM Windows with WebView2
|
||||
needs: update_tag
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: windows-latest
|
||||
target: x86_64-pc-windows-msvc
|
||||
arch: x64
|
||||
- os: windows-latest
|
||||
target: aarch64-pc-windows-msvc
|
||||
arch: arm64
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Add Rust Target
|
||||
run: rustup target add ${{ matrix.target }}
|
||||
|
||||
- name: Rust Cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: src-tauri
|
||||
cache-all-crates: true
|
||||
cache-on-failure: true
|
||||
|
||||
- name: Install Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "22"
|
||||
|
||||
- uses: pnpm/action-setup@v4
|
||||
name: Install pnpm
|
||||
with:
|
||||
run_install: false
|
||||
|
||||
- name: Pnpm install and check
|
||||
run: |
|
||||
pnpm i
|
||||
pnpm check ${{ matrix.target }}
|
||||
|
||||
- name: Release ${{ env.TAG_CHANNEL }} Version
|
||||
run: pnpm release-version ${{ env.TAG_NAME }}
|
||||
|
||||
- name: Download WebView2 Runtime
|
||||
run: |
|
||||
invoke-webrequest -uri https://github.com/westinyang/WebView2RuntimeArchive/releases/download/109.0.1518.78/Microsoft.WebView2.FixedVersionRuntime.109.0.1518.78.${{ matrix.arch }}.cab -outfile Microsoft.WebView2.FixedVersionRuntime.109.0.1518.78.${{ matrix.arch }}.cab
|
||||
Expand .\Microsoft.WebView2.FixedVersionRuntime.109.0.1518.78.${{ matrix.arch }}.cab -F:* ./src-tauri
|
||||
Remove-Item .\src-tauri\tauri.windows.conf.json
|
||||
Rename-Item .\src-tauri\webview2.${{ matrix.arch }}.json tauri.windows.conf.json
|
||||
|
||||
- name: Tauri build
|
||||
id: build
|
||||
uses: tauri-apps/tauri-action@v0
|
||||
env:
|
||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
||||
with:
|
||||
tauriScript: pnpm
|
||||
args: --target ${{ matrix.target }}
|
||||
|
||||
- name: Rename
|
||||
run: |
|
||||
$files = Get-ChildItem ".\src-tauri\target\${{ matrix.target }}\release\bundle\nsis\*-setup.exe"
|
||||
foreach ($file in $files) {
|
||||
$newName = $file.Name -replace "-setup\.exe$", "_fixed_webview2-setup.exe"
|
||||
Rename-Item $file.FullName $newName
|
||||
}
|
||||
|
||||
$files = Get-ChildItem ".\src-tauri\target\${{ matrix.target }}\release\bundle\nsis\*.nsis.zip"
|
||||
foreach ($file in $files) {
|
||||
$newName = $file.Name -replace "-setup\.nsis\.zip$", "_fixed_webview2-setup.nsis.zip"
|
||||
Rename-Item $file.FullName $newName
|
||||
}
|
||||
|
||||
$files = Get-ChildItem ".\src-tauri\target\${{ matrix.target }}\release\bundle\nsis\*-setup.exe.sig"
|
||||
foreach ($file in $files) {
|
||||
$newName = $file.Name -replace "-setup\.exe\.sig$", "_fixed_webview2-setup.exe.sig"
|
||||
Rename-Item $file.FullName $newName
|
||||
}
|
||||
|
||||
- name: Upload Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
name: "Clash Verge Rev ${{ env.TAG_CHANNEL }}"
|
||||
prerelease: true
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup*
|
||||
|
||||
- name: Portable Bundle
|
||||
run: pnpm portable-fixed-webview2 ${{ matrix.target }} --${{ env.TAG_NAME }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -1,58 +0,0 @@
|
||||
name: Check Missing i18n Keys
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- "src/locales/en.json"
|
||||
- "src/locales/*.json"
|
||||
- ".github/workflows/i18n-check.yml"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
check-i18n:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Install jq
|
||||
run: sudo apt-get install -y jq
|
||||
|
||||
- name: Check missing i18n keys
|
||||
id: check-missing
|
||||
run: |
|
||||
mkdir -p i18n-missing
|
||||
EN_KEYS=$(jq -r 'keys[]' src/locales/en.json | sort)
|
||||
for file in src/locales/*.json; do
|
||||
[ "$file" = "src/locales/en.json" ] && continue
|
||||
LANG=$(basename "$file" .json)
|
||||
jq -r 'keys[]' "$file" | sort > tmp_keys.txt
|
||||
comm -23 <(echo "$EN_KEYS") tmp_keys.txt > i18n-missing/$LANG.txt || true
|
||||
if [ -s i18n-missing/$LANG.txt ]; then
|
||||
echo "Missing keys in $LANG:"
|
||||
cat i18n-missing/$LANG.txt
|
||||
fi
|
||||
done
|
||||
|
||||
- name: Create PR if missing keys found
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
if: |
|
||||
always() && (hashFiles('i18n-missing/*.txt') != '')
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: "chore(i18n): report missing translation keys"
|
||||
title: "chore(i18n): report missing translation keys"
|
||||
body: |
|
||||
The following language files are missing keys compared to en.json:
|
||||
|
||||
${{ steps.check-missing.outputs.summary }}
|
||||
|
||||
Each file in `i18n-missing/` lists the missing keys for that language.
|
||||
branch: i18n/missing-keys-report
|
||||
add-paths: |
|
||||
i18n-missing/*.txt
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
name: Release Build
|
||||
|
||||
# TODO: 参照 alpha.yml 修改,实现稳定版发布,只允许通过 git tag 触发
|
||||
on:
|
||||
workflow_dispatch:
|
||||
permissions: write-all
|
||||
|
||||
@@ -18,10 +18,18 @@ A Clash Meta GUI based on <a href="https://github.com/tauri-apps/tauri">Tauri</a
|
||||
## Install
|
||||
|
||||
请到发布页面下载对应的安装包:[Release page](https://github.com/clash-verge-rev/clash-verge-rev/releases)<br>
|
||||
Go to the [release page](https://github.com/clash-verge-rev/clash-verge-rev/releases) to download the corresponding installation package<br>
|
||||
Go to the [Release page](https://github.com/clash-verge-rev/clash-verge-rev/releases) to download the corresponding installation package<br>
|
||||
Supports Windows (x64/x86), Linux (x64/arm64) and macOS 10.15+ (intel/apple).
|
||||
|
||||
### 安装说明和常见问题,请到[文档页](https://clash-verge-rev.github.io/)查看:[Doc](https://clash-verge-rev.github.io/)
|
||||
#### 我应当怎样选择发行版
|
||||
|
||||
| 版本 | 特征 | 链接 |
|
||||
|:-----|:-----|:-----|
|
||||
|Stable|正式版,高可靠性,适合日常使用。|[Release](https://github.com/clash-verge-rev/clash-verge-rev/releases) |
|
||||
|Alpha|早期测试版,功能未完善,可能存在缺陷。|[Alpha](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/alpha)|
|
||||
|AutoBuild|滚动更新版,持续集成更新,适合开发测试。|[AutoBuild](https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/autobuild)|
|
||||
|
||||
#### 安装说明和常见问题,请到 [文档页](https://clash-verge-rev.github.io/) 查看
|
||||
|
||||
---
|
||||
|
||||
@@ -29,7 +37,7 @@ Supports Windows (x64/x86), Linux (x64/arm64) and macOS 10.15+ (intel/apple).
|
||||
|
||||
## Promotion
|
||||
|
||||
[狗狗加速 —— 技术流机场 Doggygo VPN](https://verge.dginv.click/#/register?code=oaxsAGo6)
|
||||
#### [狗狗加速 —— 技术流机场 Doggygo VPN](https://verge.dginv.click/#/register?code=oaxsAGo6)
|
||||
|
||||
- 高性能海外机场,免费试用,优惠套餐,解锁流媒体,全球首家支持 Hysteria 协议。
|
||||
- 使用 Clash Verge 专属邀请链接注册送 3 天,每天 1G 流量免费试用:[点此注册](https://verge.dginv.click/#/register?code=oaxsAGo6)
|
||||
@@ -41,6 +49,18 @@ Supports Windows (x64/x86), Linux (x64/arm64) and macOS 10.15+ (intel/apple).
|
||||
- 解锁流媒体及 ChatGPT
|
||||
- 官网:[https://狗狗加速.com](https://verge.dginv.click/#/register?code=oaxsAGo6)
|
||||
|
||||
|
||||
#### 本项目的构建与发布环境由 [YXVM](https://yxvm.com/aff.php?aff=827) 独立服务器全力支持,
|
||||
感谢提供 独享资源、高性能、高速网络 的强大后端环境。如果你觉得下载够快、使用够爽,那是因为我们用了好服务器!
|
||||
|
||||
🧩 YXVM 独立服务器优势:
|
||||
- 🌎 优质网络,回程优化,下载快到飞起
|
||||
- 🔧 物理机独享资源,非VPS可比,性能拉满
|
||||
- 🧠 适合跑代理、搭建 WEB 站 CDN 站 、搞 CI/CD 或任何高负载应用
|
||||
- 💡 支持即开即用,多机房选择,CN2 / IEPL 可选
|
||||
- 📦 本项目使用配置已在售,欢迎同款入手!
|
||||
- 🎯 想要同款构建体验?[立即下单 YXVM 独立服务器!](https://yxvm.com/aff.php?aff=827)
|
||||
|
||||
## Features
|
||||
|
||||
- 基于性能强劲的 Rust 和 Tauri 2 框架
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
## v2.2.4-alpha
|
||||
## v2.3.0
|
||||
|
||||
尽管外部控制密钥已自动补全默认值且不允许为空。仍然推荐自行修改外部控制密钥。
|
||||
|
||||
#### 已知问题
|
||||
#### ⚠️ 已知问题
|
||||
- 仅在Ubuntu 22.04/24.04,Fedora 41 **Gnome桌面环境** 做过简单测试,不保证其他其他Linux发行版可用,将在未来做进一步适配和调优
|
||||
- MacOS 下 墙贴主要为浅色,Tray 图标深色时图标闪烁;彩色 Tray 速率颜色淡
|
||||
- 窗口状态管理器已确定上游存在缺陷,暂时移除。当前不再内置窗口大小和位置记忆。
|
||||
- MacOS 下卸载服务后需手动重启软件才能与内核通信。
|
||||
|
||||
### 2.2.4 相对于 2.2.3
|
||||
#### 修复了:
|
||||
### 2.3.0 相对于 2.2.3
|
||||
#### 🐞 修复问题
|
||||
- 首页"代理模式"快速切换导致的卡死问题
|
||||
- 解锁测试报错信息
|
||||
- Macos 快捷键关闭窗口无法启用自动轻量模式
|
||||
@@ -29,7 +29,7 @@
|
||||
- 使用外部扩展脚本覆写代理组时首页无法显示代理组
|
||||
- 导出诊断 Verge 版本与设置页面不同步
|
||||
|
||||
#### 新增了:
|
||||
#### ✨ 新增功能
|
||||
- Mihomo(Meta)内核升级至 1.19.10
|
||||
- 允许代理主机地址设置为非 127.0.0.1 对 WSL 代理友好
|
||||
- 关闭系统代理时关闭已建立的网络连接
|
||||
@@ -55,9 +55,8 @@
|
||||
- 更精细化控制自动日志清理,新增1天选项
|
||||
- Winodws 快捷键名称改为 `Clash Verge`
|
||||
- 配置加载阶段自动补全 external-controller secret 字段。
|
||||
- 添加 TCP Concurrency (TCP并发)
|
||||
|
||||
#### 优化了:
|
||||
#### 🚀 优化改进
|
||||
- 系统代理 Bypass 设置
|
||||
- Windows 下使用 Startup 文件夹的方式实现开机自启,解决管理员模式下开机自启的各种问题
|
||||
- 切换到规则页面时自动刷新规则数据
|
||||
@@ -88,8 +87,9 @@
|
||||
- 配置文件缺失 secret 字段时自动填充默认值 set-your-secret
|
||||
- 优化异步处理,防止部分组件 UI 阻塞
|
||||
- 关闭 DNS 启用
|
||||
- 延迟测试链接更换为 Https 协议 https://cp.cloudflare.com/generate_204
|
||||
|
||||
#### 移除了:
|
||||
#### 🗑️ 移除内容
|
||||
- 窗口状态管理器
|
||||
- Webdav 跨平台备份恢复限制
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "clash-verge",
|
||||
"version": "2.2.4-alpha.2",
|
||||
"version": "2.3.0-alpha.0",
|
||||
"license": "GPL-3.0-only",
|
||||
"scripts": {
|
||||
"dev": "cross-env RUST_BACKTRACE=1 tauri dev -f verge-dev",
|
||||
@@ -17,7 +17,7 @@
|
||||
"portable": "node scripts/portable.mjs",
|
||||
"portable-fixed-webview2": "node scripts/portable-fixed-webview2.mjs",
|
||||
"fix-alpha-version": "node scripts/fix-alpha_version.mjs",
|
||||
"release-version": "node scripts/release_version.mjs",
|
||||
"release-version": "node scripts/release-version.mjs",
|
||||
"release-alpha-version": "node scripts/release-alpha_version.mjs",
|
||||
"prepare": "husky",
|
||||
"fmt": "cargo fmt --manifest-path ./src-tauri/Cargo.toml",
|
||||
@@ -89,6 +89,7 @@
|
||||
"@vitejs/plugin-legacy": "^6.0.2",
|
||||
"@vitejs/plugin-react": "4.4.1",
|
||||
"adm-zip": "^0.5.16",
|
||||
"commander": "^14.0.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"https-proxy-agent": "^7.0.6",
|
||||
"husky": "^9.1.7",
|
||||
@@ -111,4 +112,4 @@
|
||||
},
|
||||
"type": "module",
|
||||
"packageManager": "pnpm@9.13.2"
|
||||
}
|
||||
}
|
||||
Generated
+9
@@ -198,6 +198,9 @@ importers:
|
||||
adm-zip:
|
||||
specifier: ^0.5.16
|
||||
version: 0.5.16
|
||||
commander:
|
||||
specifier: ^14.0.0
|
||||
version: 14.0.0
|
||||
cross-env:
|
||||
specifier: ^7.0.3
|
||||
version: 7.0.3
|
||||
@@ -1812,6 +1815,10 @@ packages:
|
||||
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
commander@14.0.0:
|
||||
resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
|
||||
engines: {node: '>=20'}
|
||||
|
||||
commander@2.20.3:
|
||||
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
|
||||
|
||||
@@ -4680,6 +4687,8 @@ snapshots:
|
||||
|
||||
commander@13.1.0: {}
|
||||
|
||||
commander@14.0.0: {}
|
||||
|
||||
commander@2.20.3: {}
|
||||
|
||||
convert-source-map@1.9.0: {}
|
||||
|
||||
@@ -36,7 +36,8 @@ function getAllSourceContent() {
|
||||
const WHITELIST_KEYS = [
|
||||
'theme.light',
|
||||
'theme.dark',
|
||||
'theme.system'
|
||||
'theme.system',
|
||||
"Already Using Latest Core Version"
|
||||
];
|
||||
|
||||
// 主流程
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
import fs from "fs/promises";
|
||||
import path from "path";
|
||||
|
||||
/**
|
||||
* 更新 package.json 文件中的版本号
|
||||
*/
|
||||
async function updatePackageVersion() {
|
||||
const _dirname = process.cwd();
|
||||
const packageJsonPath = path.join(_dirname, "package.json");
|
||||
try {
|
||||
const data = await fs.readFile(packageJsonPath, "utf8");
|
||||
const packageJson = JSON.parse(data);
|
||||
|
||||
let result = packageJson.version;
|
||||
if (!result.includes("alpha")) {
|
||||
result = `${result}-alpha`;
|
||||
}
|
||||
|
||||
console.log("[INFO]: Current package.json version is: ", result);
|
||||
packageJson.version = result;
|
||||
await fs.writeFile(
|
||||
packageJsonPath,
|
||||
JSON.stringify(packageJson, null, 2),
|
||||
"utf8",
|
||||
);
|
||||
console.log(`[INFO]: package.json version updated to: ${result}`);
|
||||
} catch (error) {
|
||||
console.error("Error updating package.json version:", error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 Cargo.toml 文件中的版本号
|
||||
*/
|
||||
async function updateCargoVersion() {
|
||||
const _dirname = process.cwd();
|
||||
const cargoTomlPath = path.join(_dirname, "src-tauri", "Cargo.toml");
|
||||
try {
|
||||
const data = await fs.readFile(cargoTomlPath, "utf8");
|
||||
const lines = data.split("\n");
|
||||
|
||||
const updatedLines = lines.map((line) => {
|
||||
if (line.startsWith("version =")) {
|
||||
const versionMatch = line.match(/version\s*=\s*"([^"]+)"/);
|
||||
if (versionMatch && !versionMatch[1].includes("alpha")) {
|
||||
const newVersion = `${versionMatch[1]}-alpha`;
|
||||
return line.replace(versionMatch[1], newVersion);
|
||||
}
|
||||
}
|
||||
return line;
|
||||
});
|
||||
|
||||
await fs.writeFile(cargoTomlPath, updatedLines.join("\n"), "utf8");
|
||||
} catch (error) {
|
||||
console.error("Error updating Cargo.toml version:", error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 tauri.conf.json 文件中的版本号
|
||||
*/
|
||||
async function updateTauriConfigVersion() {
|
||||
const _dirname = process.cwd();
|
||||
const tauriConfigPath = path.join(_dirname, "src-tauri", "tauri.conf.json");
|
||||
try {
|
||||
const data = await fs.readFile(tauriConfigPath, "utf8");
|
||||
const tauriConfig = JSON.parse(data);
|
||||
|
||||
let version = tauriConfig.version;
|
||||
if (!version.includes("alpha")) {
|
||||
version = `${version}-alpha`;
|
||||
}
|
||||
|
||||
console.log("[INFO]: Current tauri.conf.json version is: ", version);
|
||||
tauriConfig.version = version;
|
||||
await fs.writeFile(
|
||||
tauriConfigPath,
|
||||
JSON.stringify(tauriConfig, null, 2),
|
||||
"utf8",
|
||||
);
|
||||
console.log(`[INFO]: tauri.conf.json version updated to: ${version}`);
|
||||
} catch (error) {
|
||||
console.error("Error updating tauri.conf.json version:", error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 主函数,依次更新所有文件的版本号
|
||||
*/
|
||||
async function main() {
|
||||
await updatePackageVersion();
|
||||
await updateCargoVersion();
|
||||
await updateTauriConfigVersion();
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -0,0 +1,213 @@
|
||||
|
||||
|
||||
/**
|
||||
* CLI tool to update version numbers in package.json, src-tauri/Cargo.toml, and src-tauri/tauri.conf.json.
|
||||
*
|
||||
* Usage:
|
||||
* pnpm release-version <version>
|
||||
*
|
||||
* <version> can be:
|
||||
* - A full semver version (e.g., 1.2.3, v1.2.3, 1.2.3-beta, v1.2.3+build)
|
||||
* - A tag: "alpha", "beta", "rc", or "autobuild"
|
||||
* - "alpha", "beta", "rc": Appends the tag to the current base version (e.g., 1.2.3-beta)
|
||||
* - "autobuild": Appends a timestamped autobuild tag (e.g., 1.2.3+autobuild.2406101530)
|
||||
*
|
||||
* Examples:
|
||||
* pnpm release-version 1.2.3
|
||||
* pnpm release-version v1.2.3-beta
|
||||
* pnpm release-version beta
|
||||
* pnpm release-version autobuild
|
||||
*
|
||||
* The script will:
|
||||
* - Validate and normalize the version argument
|
||||
* - Update the version field in package.json
|
||||
* - Update the version field in src-tauri/Cargo.toml
|
||||
* - Update the version field in src-tauri/tauri.conf.json
|
||||
*
|
||||
* Errors are logged and the process exits with code 1 on failure.
|
||||
*/
|
||||
|
||||
import fs from "fs/promises";
|
||||
import path from "path";
|
||||
import { program } from "commander";
|
||||
|
||||
/**
|
||||
* 生成短时间戳(格式:YYMMDDHHMM)
|
||||
* @returns {string}
|
||||
*/
|
||||
function generateShortTimestamp() {
|
||||
const now = new Date();
|
||||
const year = String(now.getFullYear()).slice(-2);
|
||||
const month = String(now.getMonth() + 1).padStart(2, "0");
|
||||
const day = String(now.getDate()).padStart(2, "0");
|
||||
const hours = String(now.getHours()).padStart(2, "0");
|
||||
const minutes = String(now.getMinutes()).padStart(2, "0");
|
||||
return `${year}${month}${day}${hours}${minutes}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证版本号格式
|
||||
* @param {string} version
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isValidVersion(version) {
|
||||
return /^v?\d+\.\d+\.\d+(-(alpha|beta|rc)(\.\d+)?)?(\+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*)?$/i.test(version);
|
||||
}
|
||||
|
||||
/**
|
||||
* 标准化版本号
|
||||
* @param {string} version
|
||||
* @returns {string}
|
||||
*/
|
||||
function normalizeVersion(version) {
|
||||
return version.startsWith("v") ? version : `v${version}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 提取基础版本号(去掉所有 -tag 和 +build 部分)
|
||||
* @param {string} version
|
||||
* @returns {string}
|
||||
*/
|
||||
function getBaseVersion(version) {
|
||||
let base = version.replace(/-(alpha|beta|rc)(\.\d+)?/i, '');
|
||||
base = base.replace(/\+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*/g, '');
|
||||
return base;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 package.json 版本号
|
||||
* @param {string} newVersion
|
||||
*/
|
||||
async function updatePackageVersion(newVersion) {
|
||||
const _dirname = process.cwd();
|
||||
const packageJsonPath = path.join(_dirname, "package.json");
|
||||
try {
|
||||
const data = await fs.readFile(packageJsonPath, "utf8");
|
||||
const packageJson = JSON.parse(data);
|
||||
|
||||
console.log("[INFO]: Current package.json version is: ", packageJson.version);
|
||||
packageJson.version = newVersion.startsWith("v") ? newVersion.slice(1) : newVersion;
|
||||
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf8");
|
||||
console.log(`[INFO]: package.json version updated to: ${packageJson.version}`);
|
||||
} catch (error) {
|
||||
console.error("Error updating package.json version:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 Cargo.toml 版本号
|
||||
* @param {string} newVersion
|
||||
*/
|
||||
async function updateCargoVersion(newVersion) {
|
||||
const _dirname = process.cwd();
|
||||
const cargoTomlPath = path.join(_dirname, "src-tauri", "Cargo.toml");
|
||||
try {
|
||||
const data = await fs.readFile(cargoTomlPath, "utf8");
|
||||
const lines = data.split("\n");
|
||||
const versionWithoutV = newVersion.startsWith("v") ? newVersion.slice(1) : newVersion;
|
||||
const baseVersion = getBaseVersion(versionWithoutV);
|
||||
|
||||
const updatedLines = lines.map((line) => {
|
||||
if (line.trim().startsWith("version =")) {
|
||||
return line.replace(/version\s*=\s*"[^"]+"/, `version = "${baseVersion}"`);
|
||||
}
|
||||
return line;
|
||||
});
|
||||
|
||||
await fs.writeFile(cargoTomlPath, updatedLines.join("\n"), "utf8");
|
||||
console.log(`[INFO]: Cargo.toml version updated to: ${baseVersion}`);
|
||||
} catch (error) {
|
||||
console.error("Error updating Cargo.toml version:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 tauri.conf.json 版本号
|
||||
* @param {string} newVersion
|
||||
*/
|
||||
async function updateTauriConfigVersion(newVersion) {
|
||||
const _dirname = process.cwd();
|
||||
const tauriConfigPath = path.join(_dirname, "src-tauri", "tauri.conf.json");
|
||||
try {
|
||||
const data = await fs.readFile(tauriConfigPath, "utf8");
|
||||
const tauriConfig = JSON.parse(data);
|
||||
const versionWithoutV = newVersion.startsWith("v") ? newVersion.slice(1) : newVersion;
|
||||
const baseVersion = getBaseVersion(versionWithoutV);
|
||||
|
||||
console.log("[INFO]: Current tauri.conf.json version is: ", tauriConfig.version);
|
||||
tauriConfig.version = baseVersion;
|
||||
await fs.writeFile(tauriConfigPath, JSON.stringify(tauriConfig, null, 2), "utf8");
|
||||
console.log(`[INFO]: tauri.conf.json version updated to: ${baseVersion}`);
|
||||
} catch (error) {
|
||||
console.error("Error updating tauri.conf.json version:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前版本号
|
||||
*/
|
||||
async function getCurrentVersion() {
|
||||
const _dirname = process.cwd();
|
||||
const packageJsonPath = path.join(_dirname, "package.json");
|
||||
try {
|
||||
const data = await fs.readFile(packageJsonPath, "utf8");
|
||||
const packageJson = JSON.parse(data);
|
||||
return packageJson.version;
|
||||
} catch (error) {
|
||||
console.error("Error getting current version:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 主函数
|
||||
*/
|
||||
async function main(versionArg) {
|
||||
if (!versionArg) {
|
||||
console.error("Error: Version argument is required");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
let newVersion;
|
||||
const validTags = ["alpha", "beta", "rc", "autobuild"];
|
||||
|
||||
if (validTags.includes(versionArg.toLowerCase())) {
|
||||
const currentVersion = await getCurrentVersion();
|
||||
const baseVersion = getBaseVersion(currentVersion);
|
||||
|
||||
if (versionArg.toLowerCase() === "autobuild") {
|
||||
const timestamp = generateShortTimestamp();
|
||||
newVersion = `${baseVersion}+autobuild.${timestamp}`;
|
||||
} else {
|
||||
newVersion = `${baseVersion}-${versionArg.toLowerCase()}`;
|
||||
}
|
||||
} else {
|
||||
if (!isValidVersion(versionArg)) {
|
||||
console.error("Error: Invalid version format");
|
||||
process.exit(1);
|
||||
}
|
||||
newVersion = normalizeVersion(versionArg);
|
||||
}
|
||||
|
||||
console.log(`[INFO]: Updating versions to: ${newVersion}`);
|
||||
await updatePackageVersion(newVersion);
|
||||
await updateCargoVersion(newVersion);
|
||||
await updateTauriConfigVersion(newVersion);
|
||||
console.log("[SUCCESS]: All version updates completed successfully!");
|
||||
} catch (error) {
|
||||
console.error("[ERROR]: Failed to update versions:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
program
|
||||
.name("pnpm release-version")
|
||||
.description("Update project version numbers")
|
||||
.argument("<version>", "version tag or full version")
|
||||
.action(main)
|
||||
.parse(process.argv);
|
||||
|
||||
@@ -1,197 +0,0 @@
|
||||
import fs from "fs/promises";
|
||||
import path from "path";
|
||||
import { program } from "commander";
|
||||
|
||||
/**
|
||||
* 验证版本号格式
|
||||
* @param {string} version
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isValidVersion(version) {
|
||||
return /^v?\d+\.\d+\.\d+(-(alpha|beta|rc)(\.\d+)?)?$/i.test(version);
|
||||
}
|
||||
|
||||
/**
|
||||
* 标准化版本号(确保v前缀可选)
|
||||
* @param {string} version
|
||||
* @returns {string}
|
||||
*/
|
||||
function normalizeVersion(version) {
|
||||
return version.startsWith("v") ? version : `v${version}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 package.json 文件中的版本号
|
||||
* @param {string} newVersion 新版本号
|
||||
*/
|
||||
async function updatePackageVersion(newVersion) {
|
||||
const _dirname = process.cwd();
|
||||
const packageJsonPath = path.join(_dirname, "package.json");
|
||||
try {
|
||||
const data = await fs.readFile(packageJsonPath, "utf8");
|
||||
const packageJson = JSON.parse(data);
|
||||
|
||||
console.log(
|
||||
"[INFO]: Current package.json version is: ",
|
||||
packageJson.version,
|
||||
);
|
||||
packageJson.version = newVersion.startsWith("v")
|
||||
? newVersion.slice(1)
|
||||
: newVersion;
|
||||
await fs.writeFile(
|
||||
packageJsonPath,
|
||||
JSON.stringify(packageJson, null, 2),
|
||||
"utf8",
|
||||
);
|
||||
console.log(
|
||||
`[INFO]: package.json version updated to: ${packageJson.version}`,
|
||||
);
|
||||
return packageJson.version;
|
||||
} catch (error) {
|
||||
console.error("Error updating package.json version:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 Cargo.toml 文件中的版本号
|
||||
* @param {string} newVersion 新版本号
|
||||
*/
|
||||
async function updateCargoVersion(newVersion) {
|
||||
const _dirname = process.cwd();
|
||||
const cargoTomlPath = path.join(_dirname, "src-tauri", "Cargo.toml");
|
||||
try {
|
||||
const data = await fs.readFile(cargoTomlPath, "utf8");
|
||||
const lines = data.split("\n");
|
||||
|
||||
const versionWithoutV = newVersion.startsWith("v")
|
||||
? newVersion.slice(1)
|
||||
: newVersion;
|
||||
|
||||
const updatedLines = lines.map((line) => {
|
||||
if (line.trim().startsWith("version =")) {
|
||||
return line.replace(
|
||||
/version\s*=\s*"[^"]+"/,
|
||||
`version = "${versionWithoutV}"`,
|
||||
);
|
||||
}
|
||||
return line;
|
||||
});
|
||||
|
||||
await fs.writeFile(cargoTomlPath, updatedLines.join("\n"), "utf8");
|
||||
console.log(`[INFO]: Cargo.toml version updated to: ${versionWithoutV}`);
|
||||
} catch (error) {
|
||||
console.error("Error updating Cargo.toml version:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 tauri.conf.json 文件中的版本号
|
||||
* @param {string} newVersion 新版本号
|
||||
*/
|
||||
async function updateTauriConfigVersion(newVersion) {
|
||||
const _dirname = process.cwd();
|
||||
const tauriConfigPath = path.join(_dirname, "src-tauri", "tauri.conf.json");
|
||||
try {
|
||||
const data = await fs.readFile(tauriConfigPath, "utf8");
|
||||
const tauriConfig = JSON.parse(data);
|
||||
|
||||
const versionWithoutV = newVersion.startsWith("v")
|
||||
? newVersion.slice(1)
|
||||
: newVersion;
|
||||
|
||||
console.log(
|
||||
"[INFO]: Current tauri.conf.json version is: ",
|
||||
tauriConfig.version,
|
||||
);
|
||||
tauriConfig.version = versionWithoutV;
|
||||
await fs.writeFile(
|
||||
tauriConfigPath,
|
||||
JSON.stringify(tauriConfig, null, 2),
|
||||
"utf8",
|
||||
);
|
||||
console.log(
|
||||
`[INFO]: tauri.conf.json version updated to: ${versionWithoutV}`,
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("Error updating tauri.conf.json version:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前版本号(从package.json)
|
||||
*/
|
||||
async function getCurrentVersion() {
|
||||
const _dirname = process.cwd();
|
||||
const packageJsonPath = path.join(_dirname, "package.json");
|
||||
try {
|
||||
const data = await fs.readFile(packageJsonPath, "utf8");
|
||||
const packageJson = JSON.parse(data);
|
||||
return packageJson.version;
|
||||
} catch (error) {
|
||||
console.error("Error getting current version:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 主函数,更新所有文件的版本号
|
||||
* @param {string} versionArg 版本参数(可以是标签或完整版本号)
|
||||
*/
|
||||
async function main(versionArg) {
|
||||
if (!versionArg) {
|
||||
console.error("Error: Version argument is required");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
let newVersion;
|
||||
const validTags = ["alpha", "beta", "rc"];
|
||||
|
||||
// 判断参数是标签还是完整版本号
|
||||
if (validTags.includes(versionArg.toLowerCase())) {
|
||||
// 标签模式:在当前版本基础上添加标签
|
||||
const currentVersion = await getCurrentVersion();
|
||||
const baseVersion = currentVersion.replace(
|
||||
/-(alpha|beta|rc)(\.\d+)?$/i,
|
||||
"",
|
||||
);
|
||||
newVersion = `${baseVersion}-${versionArg.toLowerCase()}`;
|
||||
} else {
|
||||
// 完整版本号模式
|
||||
if (!isValidVersion(versionArg)) {
|
||||
console.error(
|
||||
"Error: Invalid version format. Expected format: vX.X.X or vX.X.X-tag (e.g. v2.2.3 or v2.2.3-alpha)",
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
newVersion = normalizeVersion(versionArg);
|
||||
}
|
||||
|
||||
console.log(`[INFO]: Updating versions to: ${newVersion}`);
|
||||
await updatePackageVersion(newVersion);
|
||||
await updateCargoVersion(newVersion);
|
||||
await updateTauriConfigVersion(newVersion);
|
||||
console.log("[SUCCESS]: All version updates completed successfully!");
|
||||
} catch (error) {
|
||||
console.error("[ERROR]: Failed to update versions:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Example:
|
||||
// pnpm release-version 2.2.3-alpha
|
||||
// 设置命令行界面
|
||||
program
|
||||
.name("pnpm release-version")
|
||||
.description(
|
||||
"Update project version numbers. Can add tag (alpha/beta/rc) or set full version (e.g. v2.2.3 or v2.2.3-alpha)",
|
||||
)
|
||||
.argument(
|
||||
"<version>",
|
||||
"version tag (alpha/beta/rc) or full version (e.g. v2.2.3 or v2.2.3-alpha)",
|
||||
)
|
||||
.action(main)
|
||||
.parse(process.argv);
|
||||
Generated
+1
-1
@@ -1042,7 +1042,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clash-verge"
|
||||
version = "2.2.4-alpha"
|
||||
version = "2.3.0"
|
||||
dependencies = [
|
||||
"ab_glyph",
|
||||
"aes-gcm",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "clash-verge"
|
||||
version = "2.2.4-alpha"
|
||||
version = "2.3.0"
|
||||
description = "clash verge"
|
||||
authors = ["zzzgydi", "wonfen", "MystiPanda"]
|
||||
license = "GPL-3.0-only"
|
||||
|
||||
@@ -150,7 +150,7 @@ impl MihomoManager {
|
||||
test_url: Option<String>,
|
||||
timeout: i32,
|
||||
) -> Result<serde_json::Value, String> {
|
||||
let test_url = test_url.unwrap_or("http://cp.cloudflare.com/generate_204".to_string());
|
||||
let test_url = test_url.unwrap_or("https://cp.cloudflare.com/generate_204".to_string());
|
||||
let url = format!(
|
||||
"{}/proxies/{}/delay?url={}&timeout={}",
|
||||
self.mihomo_server, name, test_url, timeout
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "2.2.4-alpha",
|
||||
"version": "2.3.0",
|
||||
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
|
||||
"bundle": {
|
||||
"active": true,
|
||||
|
||||
@@ -454,7 +454,7 @@ export const GroupsEditorViewer = (props: Props) => {
|
||||
<ListItemText primary={t("Health Check Url")} />
|
||||
<TextField
|
||||
autoComplete="new-password"
|
||||
placeholder="https://www.gstatic.com/generate_204"
|
||||
placeholder="https://cp.cloudflare.com/generate_204"
|
||||
size="small"
|
||||
sx={{ width: "calc(100% - 150px)" }}
|
||||
{...field}
|
||||
|
||||
@@ -50,13 +50,13 @@ export const ClashCoreViewer = forwardRef<DialogRef>((props, ref) => {
|
||||
setChangingCore(core);
|
||||
closeAllConnections();
|
||||
const errorMsg = await changeClashCore(core);
|
||||
|
||||
|
||||
if (errorMsg) {
|
||||
showNotice('error', errorMsg);
|
||||
setChangingCore(null);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
mutateVerge();
|
||||
setTimeout(() => {
|
||||
mutate("getClashConfig");
|
||||
@@ -89,7 +89,11 @@ export const ClashCoreViewer = forwardRef<DialogRef>((props, ref) => {
|
||||
showNotice('success', t(`Core Version Updated`));
|
||||
} catch (err: any) {
|
||||
setUpgrading(false);
|
||||
showNotice('error', err.response?.data?.message || err.toString());
|
||||
const errMsg = err.response?.data?.message || err.toString();
|
||||
const showMsg = errMsg.includes("already using latest version")
|
||||
? "Already Using Latest Core Version"
|
||||
: errMsg;
|
||||
showNotice('error', t(showMsg));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -216,7 +216,7 @@ export const MiscViewer = forwardRef<DialogRef>((props, ref) => {
|
||||
spellCheck="false"
|
||||
sx={{ width: 250, marginLeft: "auto" }}
|
||||
value={values.defaultLatencyTest}
|
||||
placeholder="http://cp.cloudflare.com/generate_204"
|
||||
placeholder="https://cp.cloudflare.com/generate_204"
|
||||
onChange={(e) =>
|
||||
setValues((v) => ({ ...v, defaultLatencyTest: e.target.value }))
|
||||
}
|
||||
|
||||
@@ -39,7 +39,6 @@ const SettingClash = ({ onError }: Props) => {
|
||||
|
||||
const {
|
||||
ipv6,
|
||||
"tcp-concurrent": tcp,
|
||||
"allow-lan": allowLan,
|
||||
"log-level": logLevel,
|
||||
"unified-delay": unifiedDelay,
|
||||
@@ -181,27 +180,6 @@ const SettingClash = ({ onError }: Props) => {
|
||||
</GuardState>
|
||||
</SettingItem>
|
||||
|
||||
<SettingItem
|
||||
label={t("TCP Concurrency")}
|
||||
extra={
|
||||
<TooltipIcon
|
||||
title={t("TCP ConcurrencyWhen accessing a web page, DNS resolution generally results in multiple IP addresses.")}
|
||||
sx={{ opacity: "0.7" }}
|
||||
/>
|
||||
}
|
||||
>
|
||||
<GuardState
|
||||
value={tcp ?? false}
|
||||
valueProps="checked"
|
||||
onCatch={onError}
|
||||
onFormat={onSwitchFormat}
|
||||
onChange={(e) => onChangeData({ "tcp-concurrent": e })}
|
||||
onGuard={(e) => patchClash({ "tcp-concurrent": e })}
|
||||
>
|
||||
<Switch edge="end" />
|
||||
</GuardState>
|
||||
</SettingItem>
|
||||
|
||||
<SettingItem
|
||||
label={t("Log Level")}
|
||||
extra={
|
||||
|
||||
@@ -270,6 +270,7 @@
|
||||
"Support %host, %port, %secret": "Support %host, %port, %secret",
|
||||
"Clash Core": "Clash Core",
|
||||
"Upgrade": "Upgrade",
|
||||
"Already Using Latest Core Version": "Already Using Latest Core Version",
|
||||
"Restart": "Restart",
|
||||
"Release Version": "Release Version",
|
||||
"Alpha Version": "Alpha Version",
|
||||
@@ -568,7 +569,5 @@
|
||||
"Enable one-click random API port and key. Click to randomize the port and key": "Enable one-click random API port and key. Click to randomize the port and key",
|
||||
"Saving...": "Saving...",
|
||||
"Port settings saved": "Port settings saved",
|
||||
"Failed to save settings": "Failed to save settings",
|
||||
"TCP Concurrency": "TCP Concurrency",
|
||||
"TCP ConcurrencyWhen accessing a web page, DNS resolution generally results in multiple IP addresses.": "TCP ConcurrencyWhen accessing a web page, DNS resolution generally results in multiple IP addresses."
|
||||
}
|
||||
"Failed to save settings": "Failed to save settings"
|
||||
}
|
||||
@@ -270,6 +270,7 @@
|
||||
"Support %host, %port, %secret": "支持 %host, %port, %secret",
|
||||
"Clash Core": "Clash 内核",
|
||||
"Upgrade": "升级内核",
|
||||
"Already Using Latest Core Version": "已使用最新内核版本",
|
||||
"Restart": "重启内核",
|
||||
"Release Version": "正式版",
|
||||
"Alpha Version": "预览版",
|
||||
@@ -568,7 +569,5 @@
|
||||
"Enable one-click random API port and key. Click to randomize the port and key": "开启一键随机API端口和密钥,点进去就可以随机端口和密钥",
|
||||
"Saving...": "保存中...",
|
||||
"Port settings saved": "端口设置已保存",
|
||||
"Failed to save settings": "端口设置失败",
|
||||
"TCP Concurrency": "TCP并发",
|
||||
"TCP ConcurrencyWhen accessing a web page, DNS resolution generally results in multiple IP addresses.": "TCP 并发性当访问网页时,DNS 解析通常会产生多个 IP 地址。"
|
||||
}
|
||||
"Failed to save settings": "端口设置失败"
|
||||
}
|
||||
@@ -83,7 +83,7 @@ export const getProxyDelay = async (
|
||||
) => {
|
||||
const params = {
|
||||
timeout: timeout || 10000,
|
||||
url: url || "http://cp.cloudflare.com/generate_204",
|
||||
url: url || "https://cp.cloudflare.com/generate_204",
|
||||
};
|
||||
const instance = await getAxios();
|
||||
const result = await instance.get(
|
||||
@@ -274,7 +274,7 @@ export const getGroupProxyDelays = async (
|
||||
) => {
|
||||
const params = {
|
||||
timeout: timeout || 10000,
|
||||
url: url || "http://cp.cloudflare.com/generate_204",
|
||||
url: url || "https://cp.cloudflare.com/generate_204",
|
||||
};
|
||||
|
||||
console.log(
|
||||
|
||||
@@ -183,7 +183,7 @@ export async function cmdGetProxyDelay(
|
||||
url?: string,
|
||||
) {
|
||||
// 确保URL不为空
|
||||
const testUrl = url || "http://cp.cloudflare.com/generate_204";
|
||||
const testUrl = url || "https://cp.cloudflare.com/generate_204";
|
||||
console.log(
|
||||
`[API] 调用延迟测试API,代理: ${name}, 超时: ${timeout}ms, URL: ${testUrl}`,
|
||||
);
|
||||
|
||||
@@ -23,7 +23,7 @@ class DelayManager {
|
||||
`[DelayManager] 获取测试URL,组: ${group}, URL: ${url || "未设置"}`,
|
||||
);
|
||||
// 如果未设置URL,返回默认URL
|
||||
return url || "http://cp.cloudflare.com/generate_204";
|
||||
return url || "https://cp.cloudflare.com/generate_204";
|
||||
}
|
||||
|
||||
setListener(name: string, group: string, listener: (time: number) => void) {
|
||||
|
||||
-1
@@ -33,7 +33,6 @@ interface IConfigData {
|
||||
"external-controller": string;
|
||||
secret: string;
|
||||
"unified-delay": boolean;
|
||||
"tcp-concurrent": boolean;
|
||||
tun: {
|
||||
stack: string;
|
||||
device: string;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
src-git packages https://github.com/coolsnowwolf/packages
|
||||
#src-git luci https://github.com/coolsnowwolf/luci
|
||||
src-git luci https://github.com/coolsnowwolf/luci.git;openwrt-24.10
|
||||
src-git luci https://github.com/coolsnowwolf/luci.git;openwrt-23.05
|
||||
src-git routing https://github.com/coolsnowwolf/routing
|
||||
src-git telephony https://github.com/coolsnowwolf/telephony.git
|
||||
#src-git helloworld https://github.com/fw876/helloworld.git
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.12 = .31
|
||||
LINUX_KERNEL_HASH-6.12.31 = b04c5b3e5df6e0aa5e9cd1efe527fac99f9dd39a43b97f13b22f8ca93e524ba7
|
||||
LINUX_VERSION-6.12 = .30
|
||||
LINUX_KERNEL_HASH-6.12.30 = df046a48971e40ce0b2e003e7e55b6b1e7da2912120eb216d5d6c8450c9cf82e
|
||||
|
||||
@@ -14,6 +14,7 @@ board=$(board_name)
|
||||
case "$board" in
|
||||
bananapi,bpi-r3|\
|
||||
bananapi,bpi-r4|\
|
||||
bananapi,bpi-r4-2g5|\
|
||||
bananapi,bpi-r4-poe)
|
||||
case "$(cmdline_get_var root)" in
|
||||
/dev/mmc*)
|
||||
|
||||
@@ -426,7 +426,7 @@ define KernelPackage/phy-realtek
|
||||
CONFIG_REALTEK_PHY_HWMON=y
|
||||
DEPENDS:=+kmod-libphy +kmod-hwmon-core
|
||||
FILES:=$(LINUX_DIR)/drivers/net/phy/realtek.ko@lt6.12 \
|
||||
$(LINUX_DIR)/drivers/net/phy/realtek/realtek.ko@ge6.12
|
||||
$(LINUX_DIR)/drivers/net/phy/realtek/realtek.ko@ge6.12
|
||||
AUTOLOAD:=$(call AutoLoad,18,realtek,1)
|
||||
endef
|
||||
|
||||
@@ -970,7 +970,7 @@ define KernelPackage/r8169
|
||||
CONFIG_R8169 \
|
||||
CONFIG_R8169_LEDS=y@ge6.6
|
||||
FILES:=$(LINUX_DIR)/drivers/net/ethernet/realtek/r8169.ko
|
||||
AUTOLOAD:=$(call AutoProbe,r8169)
|
||||
AUTOLOAD:=$(call AutoProbe,r8169,1)
|
||||
endef
|
||||
|
||||
define KernelPackage/r8169/description
|
||||
@@ -1192,7 +1192,7 @@ $(eval $(call KernelPackage,iavf))
|
||||
define KernelPackage/ice
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
TITLE:=Intel(R) Ethernet Controller E810 Series support
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-ptp +LINUX_6_12:kmod-hwmon-core +LINUX_6_12:kmod-libie
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-ptp +kmod-hwmon-core +LINUX_6_12:kmod-libie
|
||||
KCONFIG:=CONFIG_ICE \
|
||||
CONFIG_ICE_HWMON=y \
|
||||
CONFIG_ICE_HWTS=n \
|
||||
|
||||
@@ -10,13 +10,13 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=6.1.110-1
|
||||
PKG_VERSION:=6.6.15
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL-2.0-only
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v6.1.110/
|
||||
PKG_HASH:=2415bc529ca25be0aa597f9638d8b6fc4138080bbaea96881a38101896df6703
|
||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources/
|
||||
PKG_HASH:=3bbc461121134fda9089c084a5eed577d05e7837a157edf9a3797937172a3ece
|
||||
|
||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
|
||||
@@ -166,7 +166,7 @@ define KernelPackage/mac80211-hwsim
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
TITLE:=mac80211 HW simulation device
|
||||
DEPENDS+= +kmod-mac80211 +@DRIVER_11AX_SUPPORT +@DRIVER_11AC_SUPPORT
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/mac80211_hwsim.ko
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/virtual/mac80211_hwsim.ko
|
||||
AUTOLOAD:=$(call AutoProbe,mac80211_hwsim)
|
||||
endef
|
||||
|
||||
@@ -299,13 +299,19 @@ define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
$(PKG_UNPACK)
|
||||
$(Build/Patch)
|
||||
rm -rf \
|
||||
$(PKG_BUILD_DIR)/include/linux/ssb \
|
||||
$(PKG_BUILD_DIR)/include/linux/bcma \
|
||||
$(PKG_BUILD_DIR)/include/net/bluetooth
|
||||
|
||||
rm -f \
|
||||
$(PKG_BUILD_DIR)/include/linux/cordic.h \
|
||||
$(PKG_BUILD_DIR)/include/linux/crc8.h \
|
||||
$(PKG_BUILD_DIR)/include/linux/eeprom_93cx6.h \
|
||||
$(PKG_BUILD_DIR)/include/linux/wl12xx.h \
|
||||
$(PKG_BUILD_DIR)/include/linux/mhi.h \
|
||||
$(PKG_BUILD_DIR)/include/net/rsi_91x.h \
|
||||
$(PKG_BUILD_DIR)/include/trace/events/qrtr.h \
|
||||
$(PKG_BUILD_DIR)/backport-include/linux/platform_data/brcmnand.h \
|
||||
$(PKG_BUILD_DIR)/backport-include/linux/soc/mediatek/mtk_wed.h
|
||||
$(PKG_BUILD_DIR)/include/net/ieee80211.h \
|
||||
$(PKG_BUILD_DIR)/backport-include/linux/bcm47xx_nvram.h
|
||||
|
||||
echo 'compat-wireless-$(PKG_VERSION)-$(PKG_RELEASE)-$(REVISION)' > $(PKG_BUILD_DIR)/compat_version
|
||||
endef
|
||||
@@ -321,6 +327,7 @@ endif
|
||||
ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"")
|
||||
ifeq ($(strip $(CONFIG_KERNEL_GIT_CLONE_URI)),"")
|
||||
define Build/Configure
|
||||
cmp $(PKG_BUILD_DIR)/include/linux/ath9k_platform.h $(LINUX_DIR)/include/linux/ath9k_platform.h
|
||||
cmp $(PKG_BUILD_DIR)/include/linux/ath5k_platform.h $(LINUX_DIR)/include/linux/ath5k_platform.h
|
||||
cmp $(PKG_BUILD_DIR)/include/linux/rt2x00_platform.h $(LINUX_DIR)/include/linux/rt2x00_platform.h
|
||||
endef
|
||||
|
||||
@@ -69,12 +69,7 @@ config-$(call config_package,ath11k) += ATH11K
|
||||
config-$(call config_package,ath11k-ahb) += ATH11K_AHB
|
||||
config-$(call config_package,ath11k-pci) += ATH11K_PCI
|
||||
|
||||
config-$(call config_package,ath5k) += ATH5K
|
||||
ifdef CONFIG_TARGET_ath25
|
||||
config-y += ATH5K_AHB
|
||||
else
|
||||
config-y += ATH5K_PCI
|
||||
endif
|
||||
config-$(call config_package,ath5k) += ATH5K ATH5K_PCI
|
||||
|
||||
config-$(call config_package,ath6kl) += ATH6KL
|
||||
config-$(call config_package,ath6kl-sdio) += ATH6KL_SDIO
|
||||
@@ -85,14 +80,6 @@ config-$(call config_package,ar5523) += AR5523
|
||||
|
||||
config-$(call config_package,wil6210) += WIL6210
|
||||
|
||||
define KernelPackage/qcom-qmi-helpers
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
TITLE:=Qualcomm QMI backports helpers
|
||||
HIDDEN:=1
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/soc/qcom/qmi_helpers.ko
|
||||
AUTOLOAD:=$(call AutoProbe,qmi_helpers)
|
||||
endef
|
||||
|
||||
define KernelPackage/ath/config
|
||||
if PACKAGE_kmod-ath
|
||||
config ATH_USER_REGD
|
||||
@@ -143,10 +130,18 @@ define KernelPackage/ath/config
|
||||
endif
|
||||
endef
|
||||
|
||||
define KernelPackage/qcom-qmi-helpers
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
TITLE:=Qualcomm QMI backports helpers
|
||||
HIDDEN:=1
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/soc/qcom/qmi_helpers.ko
|
||||
AUTOLOAD:=$(call AutoProbe,qmi_helpers)
|
||||
endef
|
||||
|
||||
define KernelPackage/ath
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
TITLE:=Atheros common driver part
|
||||
DEPENDS+= @PCI_SUPPORT||USB_SUPPORT||TARGET_ath79||TARGET_ath25 +kmod-mac80211
|
||||
DEPENDS+= @PCI_SUPPORT||USB_SUPPORT||TARGET_ath79 +kmod-mac80211
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath.ko
|
||||
MENU:=1
|
||||
endef
|
||||
@@ -159,7 +154,7 @@ define KernelPackage/ath5k
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
TITLE:=Atheros 5xxx wireless cards support
|
||||
URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath5k
|
||||
DEPENDS+= @(PCI_SUPPORT||TARGET_ath25) +kmod-ath
|
||||
DEPENDS+= @PCI_SUPPORT +kmod-ath
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath5k/ath5k.ko
|
||||
AUTOLOAD:=$(call AutoProbe,ath5k)
|
||||
endef
|
||||
|
||||
@@ -416,7 +416,10 @@ define KernelPackage/brcmfmac
|
||||
DEPENDS+= @USB_SUPPORT +kmod-cfg80211 +@DRIVER_11AC_SUPPORT \
|
||||
+kmod-brcmutil +BRCMFMAC_SDIO:kmod-mmc @!TARGET_uml \
|
||||
+BRCMFMAC_USB:kmod-usb-core +BRCMFMAC_USB:brcmfmac-firmware-usb
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko
|
||||
FILES:= \
|
||||
$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko \
|
||||
$(foreach type,bca cyw wcc, \
|
||||
$(PKG_BUILD_DIR)/drivers/net/wireless/broadcom/brcm80211/brcmfmac/$(type)/brcmfmac-$(type).ko)
|
||||
AUTOLOAD:=$(call AutoProbe,brcmfmac)
|
||||
endef
|
||||
|
||||
@@ -432,6 +435,7 @@ define KernelPackage/brcmfmac/config
|
||||
default y if TARGET_amlogic
|
||||
default y if TARGET_bcm27xx
|
||||
default y if TARGET_rockchip
|
||||
default y if TARGET_starfive
|
||||
default y if TARGET_sunxi
|
||||
default n
|
||||
help
|
||||
|
||||
@@ -6,7 +6,7 @@ config-$(CONFIG_PACKAGE_IWLWIFI_DEBUGFS)+= IWLWIFI_DEBUGFS
|
||||
|
||||
define KernelPackage/iwlwifi
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
DEPENDS:= +kmod-mac80211 @PCI_SUPPORT +@DRIVER_11AC_SUPPORT +@DRIVER_11AX_SUPPORT
|
||||
DEPENDS:= +kmod-mac80211 +kmod-ptp @PCI_SUPPORT +@DRIVER_11AC_SUPPORT +@DRIVER_11AX_SUPPORT
|
||||
TITLE:=Intel AGN Wireless support
|
||||
FILES:= \
|
||||
$(PKG_BUILD_DIR)/drivers/net/wireless/intel/iwlwifi/iwlwifi.ko \
|
||||
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
From e8053643b6d70e23a634f14e4408f3a6d1d3a6bf Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@qq.com>
|
||||
Date: Sat, 27 May 2023 09:04:48 +0000
|
||||
Subject: [PATCH] wifi: ath: add struct_group for struct ath_cycle_counters
|
||||
|
||||
Add a struct_group to around all members in struct ath_cycle_counters.
|
||||
It can help the compiler detect the intended bounds of the memcpy() and
|
||||
memset().
|
||||
|
||||
This patch fixes the following build warning:
|
||||
|
||||
In function 'fortify_memset_chk',
|
||||
inlined from 'ath9k_ps_wakeup' at /home/db/openwrt/build_dir/target-mips_24kc_musl/linux-ath79_generic/backports-6.1.24/drivers/net/wireless/ath/ath9k/main.c:140:3:
|
||||
./include/linux/fortify-string.h:314:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning]
|
||||
314 | __write_overflow_field(p_size_field, size);
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@qq.com>
|
||||
---
|
||||
drivers/net/wireless/ath/ath.h | 10 ++++++----
|
||||
drivers/net/wireless/ath/ath5k/ani.c | 2 +-
|
||||
drivers/net/wireless/ath/ath5k/base.c | 4 ++--
|
||||
drivers/net/wireless/ath/ath5k/mac80211-ops.c | 2 +-
|
||||
drivers/net/wireless/ath/ath9k/link.c | 2 +-
|
||||
drivers/net/wireless/ath/ath9k/main.c | 4 ++--
|
||||
drivers/net/wireless/ath/hw.c | 2 +-
|
||||
7 files changed, 14 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath.h
|
||||
+++ b/drivers/net/wireless/ath/ath.h
|
||||
@@ -43,10 +43,12 @@ struct ath_ani {
|
||||
};
|
||||
|
||||
struct ath_cycle_counters {
|
||||
- u32 cycles;
|
||||
- u32 rx_busy;
|
||||
- u32 rx_frame;
|
||||
- u32 tx_frame;
|
||||
+ struct_group(cnts,
|
||||
+ u32 cycles;
|
||||
+ u32 rx_busy;
|
||||
+ u32 rx_frame;
|
||||
+ u32 tx_frame;
|
||||
+ );
|
||||
};
|
||||
|
||||
enum ath_device_state {
|
||||
--- a/drivers/net/wireless/ath/ath5k/ani.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/ani.c
|
||||
@@ -379,7 +379,7 @@ ath5k_hw_ani_get_listen_time(struct ath5
|
||||
spin_lock_bh(&common->cc_lock);
|
||||
|
||||
ath_hw_cycle_counters_update(common);
|
||||
- memcpy(&as->last_cc, &common->cc_ani, sizeof(as->last_cc));
|
||||
+ memcpy(&as->last_cc.cnts, &common->cc_ani.cnts, sizeof(as->last_cc.cnts));
|
||||
|
||||
/* clears common->cc_ani */
|
||||
listen = ath_hw_get_listen_time(common);
|
||||
--- a/drivers/net/wireless/ath/ath5k/base.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/base.c
|
||||
@@ -2985,8 +2985,8 @@ ath5k_reset(struct ath5k_hw *ah, struct
|
||||
memset(&ah->survey, 0, sizeof(ah->survey));
|
||||
spin_lock_bh(&common->cc_lock);
|
||||
ath_hw_cycle_counters_update(common);
|
||||
- memset(&common->cc_survey, 0, sizeof(common->cc_survey));
|
||||
- memset(&common->cc_ani, 0, sizeof(common->cc_ani));
|
||||
+ memset(&common->cc_survey.cnts, 0, sizeof(common->cc_survey.cnts));
|
||||
+ memset(&common->cc_ani.cnts, 0, sizeof(common->cc_ani.cnts));
|
||||
spin_unlock_bh(&common->cc_lock);
|
||||
|
||||
/*
|
||||
--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
|
||||
@@ -664,7 +664,7 @@ ath5k_get_survey(struct ieee80211_hw *hw
|
||||
ah->survey.time_rx += cc->rx_frame / div;
|
||||
ah->survey.time_tx += cc->tx_frame / div;
|
||||
}
|
||||
- memset(cc, 0, sizeof(*cc));
|
||||
+ memset(&cc->cnts, 0, sizeof(cc->cnts));
|
||||
spin_unlock_bh(&common->cc_lock);
|
||||
|
||||
memcpy(survey, &ah->survey, sizeof(*survey));
|
||||
--- a/drivers/net/wireless/ath/ath9k/link.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/link.c
|
||||
@@ -536,7 +536,7 @@ int ath_update_survey_stats(struct ath_s
|
||||
if (cc->cycles > 0)
|
||||
ret = cc->rx_busy * 100 / cc->cycles;
|
||||
|
||||
- memset(cc, 0, sizeof(*cc));
|
||||
+ memset(&cc->cnts, 0, sizeof(cc->cnts));
|
||||
|
||||
ath_update_survey_nf(sc, pos);
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -135,8 +135,8 @@ void ath9k_ps_wakeup(struct ath_softc *s
|
||||
if (power_mode != ATH9K_PM_AWAKE) {
|
||||
spin_lock(&common->cc_lock);
|
||||
ath_hw_cycle_counters_update(common);
|
||||
- memset(&common->cc_survey, 0, sizeof(common->cc_survey));
|
||||
- memset(&common->cc_ani, 0, sizeof(common->cc_ani));
|
||||
+ memset(&common->cc_survey.cnts, 0, sizeof(common->cc_survey.cnts));
|
||||
+ memset(&common->cc_ani.cnts, 0, sizeof(common->cc_ani.cnts));
|
||||
spin_unlock(&common->cc_lock);
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/ath/hw.c
|
||||
+++ b/drivers/net/wireless/ath/hw.c
|
||||
@@ -183,7 +183,7 @@ int32_t ath_hw_get_listen_time(struct at
|
||||
listen_time = (cc->cycles - cc->rx_frame - cc->tx_frame) /
|
||||
(common->clockrate * 1000);
|
||||
|
||||
- memset(cc, 0, sizeof(*cc));
|
||||
+ memset(&cc->cnts, 0, sizeof(cc->cnts));
|
||||
|
||||
return listen_time;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/Makefile
|
||||
+++ b/drivers/net/wireless/ath/Makefile
|
||||
@@ -15,10 +15,10 @@ ath-objs := main.o \
|
||||
@@ -16,10 +16,10 @@ ath-objs := main.o \
|
||||
regd.o \
|
||||
hw.o \
|
||||
key.o \
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
help
|
||||
--- a/local-symbols
|
||||
+++ b/local-symbols
|
||||
@@ -94,6 +94,7 @@ ADM8211=
|
||||
@@ -101,6 +101,7 @@ ADM8211=
|
||||
ATH_COMMON=
|
||||
WLAN_VENDOR_ATH=
|
||||
ATH_DEBUG=
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/net/wireless/reg.c
|
||||
+++ b/net/wireless/reg.c
|
||||
@@ -3373,6 +3373,8 @@ void regulatory_hint_country_ie(struct w
|
||||
@@ -3340,6 +3340,8 @@ void regulatory_hint_country_ie(struct w
|
||||
enum environment_cap env = ENVIRON_ANY;
|
||||
struct regulatory_request *request = NULL, *lr;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/* IE len must be evenly divisible by 2 */
|
||||
if (country_ie_len & 0x01)
|
||||
return;
|
||||
@@ -3624,6 +3626,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||
@@ -3591,6 +3593,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||
|
||||
void regulatory_hint_disconnect(void)
|
||||
{
|
||||
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
[PATCH 1/2] carl9170: re-fix fortified-memset warning
|
||||
@ 2023-06-23 15:23 Arnd Bergmann
|
||||
2023-06-23 15:24 ` [PATCH 2/2] mac80211: make ieee80211_tx_info padding explicit Arnd Bergmann
|
||||
` (2 more replies)
|
||||
0 siblings, 3 replies; 9+ messages in thread
|
||||
From: Arnd Bergmann @ 2023-06-23 15:23 UTC (permalink / raw)
|
||||
To: Christian Lamparter, Kalle Valo, Kees Cook, Johannes Berg
|
||||
Cc: Arnd Bergmann, linux-wireless, linux-kernel
|
||||
|
||||
From: Arnd Bergmann <arnd@arndb.de>
|
||||
|
||||
The carl9170_tx_release() function sometimes triggers a fortified-memset
|
||||
warning in my randconfig builds:
|
||||
|
||||
In file included from include/linux/string.h:254,
|
||||
from drivers/net/wireless/ath/carl9170/tx.c:40:
|
||||
In function 'fortify_memset_chk',
|
||||
inlined from 'carl9170_tx_release' at drivers/net/wireless/ath/carl9170/tx.c:283:2,
|
||||
inlined from 'kref_put' at include/linux/kref.h:65:3,
|
||||
inlined from 'carl9170_tx_put_skb' at drivers/net/wireless/ath/carl9170/tx.c:342:9:
|
||||
include/linux/fortify-string.h:493:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning]
|
||||
493 | __write_overflow_field(p_size_field, size);
|
||||
|
||||
Kees previously tried to avoid this by using memset_after(), but it seems
|
||||
this does not fully address the problem. I noticed that the memset_after()
|
||||
here is done on a different part of the union (status) than the original
|
||||
cast was from (rate_driver_data), which may confuse the compiler.
|
||||
|
||||
Unfortunately, the memset_after() trick does not work on driver_rates[]
|
||||
because that is part of an anonymous struct, and I could not get
|
||||
struct_group() to do this either. Using two separate memset() calls
|
||||
on the two members does address the warning though.
|
||||
|
||||
Fixes: fb5f6a0e8063b ("mac80211: Use memset_after() to clear tx status")
|
||||
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
||||
---
|
||||
drivers/net/wireless/ath/carl9170/tx.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/carl9170/tx.c
|
||||
+++ b/drivers/net/wireless/ath/carl9170/tx.c
|
||||
@@ -280,7 +280,8 @@ static void carl9170_tx_release(struct k
|
||||
* carl9170_tx_fill_rateinfo() has filled the rate information
|
||||
* before we get to this point.
|
||||
*/
|
||||
- memset_after(&txinfo->status, 0, rates);
|
||||
+ memset(&txinfo->pad, 0, sizeof(txinfo->pad));
|
||||
+ memset(&txinfo->rate_driver_data, 0, sizeof(txinfo->rate_driver_data));
|
||||
|
||||
if (atomic_read(&ar->tx_total_queued))
|
||||
ar->tx_schedule = true;
|
||||
@@ -37,7 +37,7 @@
|
||||
void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature);
|
||||
--- a/local-symbols
|
||||
+++ b/local-symbols
|
||||
@@ -153,6 +153,7 @@ ATH10K_SNOC=
|
||||
@@ -160,6 +160,7 @@ ATH10K_SNOC=
|
||||
ATH10K_DEBUG=
|
||||
ATH10K_DEBUGFS=
|
||||
ATH10K_SPECTRAL=
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath10k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/debug.c
|
||||
@@ -1260,6 +1260,9 @@ static int ath10k_debug_cal_data_fetch(s
|
||||
@@ -1261,6 +1261,9 @@ static int ath10k_debug_cal_data_fetch(s
|
||||
if (ar->hw_params.cal_data_len == 0)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ Signed-off-by: Sven Eckelmann <sven@open-mesh.com>
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath10k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/core.c
|
||||
@@ -3510,6 +3510,17 @@ int ath10k_core_register(struct ath10k *
|
||||
@@ -3507,6 +3507,17 @@ int ath10k_core_register(struct ath10k *
|
||||
|
||||
queue_work(ar->workqueue, &ar->register_work);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -9918,6 +9918,21 @@ static int ath10k_mac_init_rd(struct ath
|
||||
@@ -9917,6 +9917,21 @@ static int ath10k_mac_init_rd(struct ath
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
int ath10k_mac_register(struct ath10k *ar)
|
||||
{
|
||||
static const u32 cipher_suites[] = {
|
||||
@@ -10276,6 +10291,12 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -10275,6 +10290,12 @@ int ath10k_mac_register(struct ath10k *a
|
||||
|
||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||
|
||||
|
||||
+12
-12
@@ -114,7 +114,7 @@ v13:
|
||||
ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o
|
||||
--- a/local-symbols
|
||||
+++ b/local-symbols
|
||||
@@ -154,6 +154,7 @@ ATH10K_DEBUG=
|
||||
@@ -161,6 +161,7 @@ ATH10K_DEBUG=
|
||||
ATH10K_DEBUGFS=
|
||||
ATH10K_SPECTRAL=
|
||||
ATH10K_THERMAL=
|
||||
@@ -172,7 +172,7 @@ v13:
|
||||
.patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR,
|
||||
.uart_pin = 7,
|
||||
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
|
||||
@@ -3225,6 +3231,10 @@ int ath10k_core_start(struct ath10k *ar,
|
||||
@@ -3222,6 +3228,10 @@ int ath10k_core_start(struct ath10k *ar,
|
||||
goto err_hif_stop;
|
||||
}
|
||||
|
||||
@@ -183,7 +183,7 @@ v13:
|
||||
return 0;
|
||||
|
||||
err_hif_stop:
|
||||
@@ -3483,9 +3493,18 @@ static void ath10k_core_register_work(st
|
||||
@@ -3480,9 +3490,18 @@ static void ath10k_core_register_work(st
|
||||
goto err_spectral_destroy;
|
||||
}
|
||||
|
||||
@@ -202,7 +202,7 @@ v13:
|
||||
err_spectral_destroy:
|
||||
ath10k_spectral_destroy(ar);
|
||||
err_debug_destroy:
|
||||
@@ -3532,6 +3551,8 @@ void ath10k_core_unregister(struct ath10
|
||||
@@ -3529,6 +3548,8 @@ void ath10k_core_unregister(struct ath10
|
||||
if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags))
|
||||
return;
|
||||
|
||||
@@ -237,7 +237,7 @@ v13:
|
||||
u32 fw_crash_counter;
|
||||
--- a/drivers/net/wireless/ath/ath10k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath10k/hw.h
|
||||
@@ -520,6 +520,7 @@ struct ath10k_hw_params {
|
||||
@@ -519,6 +519,7 @@ struct ath10k_hw_params {
|
||||
const char *name;
|
||||
u32 patch_load_addr;
|
||||
int uart_pin;
|
||||
@@ -456,7 +456,7 @@ v13:
|
||||
{
|
||||
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||
@@ -4598,6 +4598,8 @@ static const struct wmi_ops wmi_tlv_ops
|
||||
@@ -4601,6 +4601,8 @@ static const struct wmi_ops wmi_tlv_ops
|
||||
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
|
||||
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
|
||||
.gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable,
|
||||
@@ -467,7 +467,7 @@ v13:
|
||||
static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
|
||||
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
@@ -7492,6 +7492,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
@@ -7472,6 +7472,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
return skb;
|
||||
}
|
||||
|
||||
@@ -517,7 +517,7 @@ v13:
|
||||
static struct sk_buff *
|
||||
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
||||
enum wmi_sta_ps_mode psmode)
|
||||
@@ -9180,6 +9223,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
@@ -9138,6 +9181,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
@@ -527,7 +527,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9250,6 +9296,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
@@ -9208,6 +9254,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
@@ -536,7 +536,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9322,6 +9370,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
@@ -9280,6 +9328,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
|
||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
@@ -545,7 +545,7 @@ v13:
|
||||
/* .gen_pdev_enable_adaptive_cca not implemented */
|
||||
};
|
||||
|
||||
@@ -9393,6 +9443,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
@@ -9351,6 +9401,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
|
||||
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
|
||||
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
|
||||
@@ -554,7 +554,7 @@ v13:
|
||||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9474,6 +9526,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||
@@ -9432,6 +9484,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||
.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
||||
if (ret)
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -10293,7 +10293,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -10292,7 +10292,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||
#include <linux/property.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/ctype.h>
|
||||
@@ -3401,6 +3402,8 @@ static int ath10k_core_probe_fw(struct a
|
||||
@@ -3398,6 +3399,8 @@ static int ath10k_core_probe_fw(struct a
|
||||
|
||||
device_get_mac_address(ar->dev, ar->mac_addr);
|
||||
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -10089,7 +10089,6 @@ int ath10k_mac_register(struct ath10k *a
|
||||
@@ -10088,7 +10088,6 @@ int ath10k_mac_register(struct ath10k *a
|
||||
ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
|
||||
ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);
|
||||
|
||||
-78
@@ -1,78 +0,0 @@
|
||||
From 81e60b2dfb2744ab6642c4aa62534b4f711fdc5d Mon Sep 17 00:00:00 2001
|
||||
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Date: Tue, 27 Sep 2022 09:18:54 +0300
|
||||
Subject: [PATCH] wifi: ath11k: stop tx queues immediately upon firmware exit
|
||||
|
||||
Currently, recovery flag is set immediately upon firmware
|
||||
exit but tx queues are stopped once firmware arrives back
|
||||
and is ready which is during ath11k_core_restart. Once
|
||||
ieee80211 hw restart is completed, tx queues are resumed.
|
||||
If during the time delta between firmware exit and firmware
|
||||
ready, mac80211 send packets, currently ath11k will drop it
|
||||
since recovery flag will be set. But warning prints will
|
||||
come -
|
||||
"ath11k c000000.wifi: failed to transmit frame -108"
|
||||
|
||||
If more tx packets are there, this could lead to flooding
|
||||
of above print.
|
||||
|
||||
However, actually tx queues should be stopped immediately
|
||||
when firmware leaves. This will prevent packets to get
|
||||
dropped when firmware is recovering.
|
||||
|
||||
Add fix to stop tx queues immediately after firmware exit.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20220923170235.18873-1-quic_adisi@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 5 +----
|
||||
drivers/net/wireless/ath/ath11k/core.h | 1 +
|
||||
drivers/net/wireless/ath/ath11k/qmi.c | 3 +++
|
||||
3 files changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -1668,7 +1668,7 @@ static void ath11k_update_11d(struct wor
|
||||
}
|
||||
}
|
||||
|
||||
-static void ath11k_core_pre_reconfigure_recovery(struct ath11k_base *ab)
|
||||
+void ath11k_core_pre_reconfigure_recovery(struct ath11k_base *ab)
|
||||
{
|
||||
struct ath11k *ar;
|
||||
struct ath11k_pdev *pdev;
|
||||
@@ -1757,9 +1757,6 @@ static void ath11k_core_restart(struct w
|
||||
struct ath11k_base *ab = container_of(work, struct ath11k_base, restart_work);
|
||||
int ret;
|
||||
|
||||
- if (!ab->is_reset)
|
||||
- ath11k_core_pre_reconfigure_recovery(ab);
|
||||
-
|
||||
ret = ath11k_core_reconfigure_on_crash(ab);
|
||||
if (ret) {
|
||||
ath11k_err(ab, "failed to reconfigure driver on crash recovery\n");
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -1158,6 +1158,7 @@ int ath11k_core_check_smbios(struct ath1
|
||||
void ath11k_core_halt(struct ath11k *ar);
|
||||
int ath11k_core_resume(struct ath11k_base *ab);
|
||||
int ath11k_core_suspend(struct ath11k_base *ab);
|
||||
+void ath11k_core_pre_reconfigure_recovery(struct ath11k_base *ab);
|
||||
|
||||
const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
|
||||
const char *filename);
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
@@ -3169,6 +3169,9 @@ static void ath11k_qmi_driver_event_work
|
||||
case ATH11K_QMI_EVENT_SERVER_EXIT:
|
||||
set_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags);
|
||||
set_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
|
||||
+
|
||||
+ if (!ab->is_reset)
|
||||
+ ath11k_core_pre_reconfigure_recovery(ab);
|
||||
break;
|
||||
case ATH11K_QMI_EVENT_REQUEST_MEM:
|
||||
ret = ath11k_qmi_event_mem_request(qmi);
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
From 45d2e268369b0c768d5a644f319758bcfd370521 Mon Sep 17 00:00:00 2001
|
||||
From: Baochen Qiang <quic_bqiang@quicinc.com>
|
||||
Date: Wed, 28 Sep 2022 09:51:40 +0800
|
||||
Subject: [PATCH] wifi: ath11k: Don't exit on wakeup failure
|
||||
|
||||
Currently, ath11k_pcic_read() returns an error if wakeup()
|
||||
fails, this makes firmware crash debug quite hard because we can
|
||||
get nothing.
|
||||
|
||||
Change to go ahead on wakeup failure, in that case we still may
|
||||
get something valid to check. There should be no mislead due
|
||||
to incorrect content because we are aware of the failure with the
|
||||
log printed.
|
||||
|
||||
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
|
||||
|
||||
Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20220928015140.5431-1-quic_bqiang@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/pcic.c | 13 ++++++++++---
|
||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/pcic.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/pcic.c
|
||||
@@ -218,9 +218,16 @@ int ath11k_pcic_read(struct ath11k_base
|
||||
if (wakeup_required && ab->pci.ops->wakeup) {
|
||||
ret = ab->pci.ops->wakeup(ab);
|
||||
if (ret) {
|
||||
- ath11k_warn(ab, "failed to wakeup for read from 0x%x: %d\n",
|
||||
- start, ret);
|
||||
- return ret;
|
||||
+ ath11k_warn(ab,
|
||||
+ "wakeup failed, data may be invalid: %d",
|
||||
+ ret);
|
||||
+ /* Even though wakeup() failed, continue processing rather
|
||||
+ * than returning because some parts of the data may still
|
||||
+ * be valid and useful in some cases, e.g. could give us
|
||||
+ * some clues on firmware crash.
|
||||
+ * Mislead due to invalid data could be avoided because we
|
||||
+ * are aware of the wakeup failure.
|
||||
+ */
|
||||
}
|
||||
}
|
||||
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
From a797f479bf3e02c6d179c2e6aeace7f9b22b0acd Mon Sep 17 00:00:00 2001
|
||||
From: Colin Ian King <colin.i.king@gmail.com>
|
||||
Date: Wed, 28 Sep 2022 15:38:34 +0100
|
||||
Subject: [PATCH] wifi: ath11k: Fix spelling mistake "chnange" -> "change"
|
||||
|
||||
There is a spelling mistake in an ath11k_dbg debug message. Fix it.
|
||||
|
||||
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20220928143834.35189-1-colin.i.king@gmail.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/wmi.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -6829,7 +6829,7 @@ static void ath11k_wmi_event_peer_sta_ps
|
||||
}
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_WMI,
|
||||
- "peer sta ps chnange ev addr %pM state %u sup_bitmap %x ps_valid %u ts %u\n",
|
||||
+ "peer sta ps change ev addr %pM state %u sup_bitmap %x ps_valid %u ts %u\n",
|
||||
ev->peer_macaddr.addr, ev->peer_ps_state,
|
||||
ev->ps_supported_bitmap, ev->peer_ps_valid,
|
||||
ev->peer_ps_timestamp);
|
||||
-52
@@ -1,52 +0,0 @@
|
||||
From 638b26652b0438563a76ec90014c8cba34db982b Mon Sep 17 00:00:00 2001
|
||||
From: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
|
||||
Date: Thu, 6 Oct 2022 06:28:42 +0530
|
||||
Subject: [PATCH 7/9] wifi: ath11k: suppress add interface error
|
||||
|
||||
In the VIF (other than monitor type) creation request, we should not
|
||||
throw the error code when the monitor VIF creation fails, since the
|
||||
actual VIF creation succeeds. If we throw the error code from driver
|
||||
then the actual VIF creation get fail. So suppress the monitor VIF
|
||||
creation error by throwing warning message instead of error code.
|
||||
|
||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.6.0.1-00760-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221006005842.8599-1-quic_periyasa@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 9 +++------
|
||||
1 file changed, 3 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -6425,18 +6425,16 @@ static int ath11k_mac_op_add_interface(s
|
||||
|
||||
ath11k_dp_vdev_tx_attach(ar, arvif);
|
||||
|
||||
+ ath11k_debugfs_add_interface(arvif);
|
||||
+
|
||||
if (vif->type != NL80211_IFTYPE_MONITOR &&
|
||||
test_bit(ATH11K_FLAG_MONITOR_CONF_ENABLED, &ar->monitor_flags)) {
|
||||
ret = ath11k_mac_monitor_vdev_create(ar);
|
||||
- if (ret) {
|
||||
+ if (ret)
|
||||
ath11k_warn(ar->ab, "failed to create monitor vdev during add interface: %d",
|
||||
ret);
|
||||
- goto err_peer_del;
|
||||
- }
|
||||
}
|
||||
|
||||
- ath11k_debugfs_add_interface(arvif);
|
||||
-
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
|
||||
return 0;
|
||||
@@ -6461,7 +6459,6 @@ err_vdev_del:
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
|
||||
err:
|
||||
- ath11k_debugfs_remove_interface(arvif);
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
|
||||
return ret;
|
||||
-102
@@ -1,102 +0,0 @@
|
||||
From c362daa213cdeb0a9e7c2ed84849544c24505720 Mon Sep 17 00:00:00 2001
|
||||
From: Manikanta Pubbisetty <quic_mpubbise@quicinc.com>
|
||||
Date: Fri, 7 Oct 2022 10:41:30 +0530
|
||||
Subject: [PATCH 8/9] wifi: ath11k: add support to configure channel dwell time
|
||||
|
||||
Add support to configure channel dwell time during scan.
|
||||
Dwell time help to stay on the channel for a specified duration
|
||||
during scan and aid userspace in finding WiFi networks. Very
|
||||
useful in passive scans where longer dwell times are needed
|
||||
to find the WiFi networks.
|
||||
|
||||
Configure channel dwell time from duration of the scan request
|
||||
received from mac80211 when the duration is non-zero. When the
|
||||
scan request does not have duration value, use the default ones,
|
||||
the current implementation.
|
||||
|
||||
Advertise corresponding feature flag NL80211_EXT_FEATURE_SET_SCAN_DWELL
|
||||
to enable the feature.
|
||||
|
||||
Change is applicable for all ath11k hardware.
|
||||
|
||||
Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1
|
||||
|
||||
Signed-off-by: Manikanta Pubbisetty <quic_mpubbise@quicinc.com>
|
||||
Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221007051130.6067-1-quic_mpubbise@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 33 +++++++++++++++++++++++----
|
||||
1 file changed, 29 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -241,7 +241,10 @@ const struct htt_rx_ring_tlv_filter ath1
|
||||
#define ath11k_a_rates (ath11k_legacy_rates + 4)
|
||||
#define ath11k_a_rates_size (ARRAY_SIZE(ath11k_legacy_rates) - 4)
|
||||
|
||||
-#define ATH11K_MAC_SCAN_TIMEOUT_MSECS 200 /* in msecs */
|
||||
+#define ATH11K_MAC_SCAN_CMD_EVT_OVERHEAD 200 /* in msecs */
|
||||
+
|
||||
+/* Overhead due to the processing of channel switch events from FW */
|
||||
+#define ATH11K_SCAN_CHANNEL_SWITCH_WMI_EVT_OVERHEAD 10 /* in msecs */
|
||||
|
||||
static const u32 ath11k_smps_map[] = {
|
||||
[WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
|
||||
@@ -3609,6 +3612,7 @@ static int ath11k_mac_op_hw_scan(struct
|
||||
struct scan_req_params arg;
|
||||
int ret = 0;
|
||||
int i;
|
||||
+ u32 scan_timeout;
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
@@ -3678,6 +3682,26 @@ static int ath11k_mac_op_hw_scan(struct
|
||||
ether_addr_copy(arg.mac_mask.addr, req->mac_addr_mask);
|
||||
}
|
||||
|
||||
+ /* if duration is set, default dwell times will be overwritten */
|
||||
+ if (req->duration) {
|
||||
+ arg.dwell_time_active = req->duration;
|
||||
+ arg.dwell_time_active_2g = req->duration;
|
||||
+ arg.dwell_time_active_6g = req->duration;
|
||||
+ arg.dwell_time_passive = req->duration;
|
||||
+ arg.dwell_time_passive_6g = req->duration;
|
||||
+ arg.burst_duration = req->duration;
|
||||
+
|
||||
+ scan_timeout = min_t(u32, arg.max_rest_time *
|
||||
+ (arg.num_chan - 1) + (req->duration +
|
||||
+ ATH11K_SCAN_CHANNEL_SWITCH_WMI_EVT_OVERHEAD) *
|
||||
+ arg.num_chan, arg.max_scan_time);
|
||||
+ } else {
|
||||
+ scan_timeout = arg.max_scan_time;
|
||||
+ }
|
||||
+
|
||||
+ /* Add a margin to account for event/command processing */
|
||||
+ scan_timeout += ATH11K_MAC_SCAN_CMD_EVT_OVERHEAD;
|
||||
+
|
||||
ret = ath11k_start_scan(ar, &arg);
|
||||
if (ret) {
|
||||
ath11k_warn(ar->ab, "failed to start hw scan: %d\n", ret);
|
||||
@@ -3686,10 +3710,8 @@ static int ath11k_mac_op_hw_scan(struct
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
}
|
||||
|
||||
- /* Add a 200ms margin to account for event/command processing */
|
||||
ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
|
||||
- msecs_to_jiffies(arg.max_scan_time +
|
||||
- ATH11K_MAC_SCAN_TIMEOUT_MSECS));
|
||||
+ msecs_to_jiffies(scan_timeout));
|
||||
|
||||
exit:
|
||||
kfree(arg.chan_list);
|
||||
@@ -9072,6 +9094,9 @@ static int __ath11k_mac_register(struct
|
||||
NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
|
||||
}
|
||||
|
||||
+ wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
+ NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
||||
+
|
||||
ath11k_reg_init(ar);
|
||||
|
||||
if (!test_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags)) {
|
||||
-116
@@ -1,116 +0,0 @@
|
||||
From 3811fa1f231f1a3e29759efef4992116604aab8b Mon Sep 17 00:00:00 2001
|
||||
From: Sowmiya Sree Elavalagan <quic_ssreeela@quicinc.com>
|
||||
Date: Tue, 11 Oct 2022 15:23:46 +0530
|
||||
Subject: [PATCH] wifi: ath11k: Fix firmware crash on vdev delete race
|
||||
condition
|
||||
|
||||
Current code does not wait for vdev delete completion on vdev create
|
||||
failures and tries to send another vdev create followed by vdev set
|
||||
param to firmware with same vdev id. This causes firmware crash.
|
||||
Fix this crash by waiting for vdev delete completion on vdev
|
||||
create failures.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.6.0.1-00905-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Sowmiya Sree Elavalagan <quic_ssreeela@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221011095346.3901-1-quic_ssreeela@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 60 +++++++++++++++++----------
|
||||
1 file changed, 37 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -6237,6 +6237,40 @@ void ath11k_mac_11d_scan_stop_all(struct
|
||||
}
|
||||
}
|
||||
|
||||
+static int ath11k_mac_vdev_delete(struct ath11k *ar, struct ath11k_vif *arvif)
|
||||
+{
|
||||
+ unsigned long time_left;
|
||||
+ struct ieee80211_vif *vif = arvif->vif;
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ lockdep_assert_held(&ar->conf_mutex);
|
||||
+
|
||||
+ reinit_completion(&ar->vdev_delete_done);
|
||||
+
|
||||
+ ret = ath11k_wmi_vdev_delete(ar, arvif->vdev_id);
|
||||
+ if (ret) {
|
||||
+ ath11k_warn(ar->ab, "failed to delete WMI vdev %d: %d\n",
|
||||
+ arvif->vdev_id, ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ time_left = wait_for_completion_timeout(&ar->vdev_delete_done,
|
||||
+ ATH11K_VDEV_DELETE_TIMEOUT_HZ);
|
||||
+ if (time_left == 0) {
|
||||
+ ath11k_warn(ar->ab, "Timeout in receiving vdev delete response\n");
|
||||
+ return -ETIMEDOUT;
|
||||
+ }
|
||||
+
|
||||
+ ar->ab->free_vdev_map |= 1LL << (arvif->vdev_id);
|
||||
+ ar->allocated_vdev_map &= ~(1LL << arvif->vdev_id);
|
||||
+ ar->num_created_vdevs--;
|
||||
+
|
||||
+ ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %pM deleted, vdev_id %d\n",
|
||||
+ vif->addr, arvif->vdev_id);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
@@ -6472,10 +6506,7 @@ err_peer_del:
|
||||
}
|
||||
|
||||
err_vdev_del:
|
||||
- ath11k_wmi_vdev_delete(ar, arvif->vdev_id);
|
||||
- ar->num_created_vdevs--;
|
||||
- ar->allocated_vdev_map &= ~(1LL << arvif->vdev_id);
|
||||
- ab->free_vdev_map |= 1LL << arvif->vdev_id;
|
||||
+ ath11k_mac_vdev_delete(ar, arvif);
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
list_del(&arvif->list);
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
@@ -6503,7 +6534,6 @@ static void ath11k_mac_op_remove_interfa
|
||||
struct ath11k *ar = hw->priv;
|
||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
- unsigned long time_left;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
@@ -6524,29 +6554,13 @@ static void ath11k_mac_op_remove_interfa
|
||||
arvif->vdev_id, ret);
|
||||
}
|
||||
|
||||
- reinit_completion(&ar->vdev_delete_done);
|
||||
-
|
||||
- ret = ath11k_wmi_vdev_delete(ar, arvif->vdev_id);
|
||||
+ ret = ath11k_mac_vdev_delete(ar, arvif);
|
||||
if (ret) {
|
||||
- ath11k_warn(ab, "failed to delete WMI vdev %d: %d\n",
|
||||
+ ath11k_warn(ab, "failed to delete vdev %d: %d\n",
|
||||
arvif->vdev_id, ret);
|
||||
goto err_vdev_del;
|
||||
}
|
||||
|
||||
- time_left = wait_for_completion_timeout(&ar->vdev_delete_done,
|
||||
- ATH11K_VDEV_DELETE_TIMEOUT_HZ);
|
||||
- if (time_left == 0) {
|
||||
- ath11k_warn(ab, "Timeout in receiving vdev delete response\n");
|
||||
- goto err_vdev_del;
|
||||
- }
|
||||
-
|
||||
- ab->free_vdev_map |= 1LL << (arvif->vdev_id);
|
||||
- ar->allocated_vdev_map &= ~(1LL << arvif->vdev_id);
|
||||
- ar->num_created_vdevs--;
|
||||
-
|
||||
- ath11k_dbg(ab, ATH11K_DBG_MAC, "vdev %pM deleted, vdev_id %d\n",
|
||||
- vif->addr, arvif->vdev_id);
|
||||
-
|
||||
if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
|
||||
clear_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags);
|
||||
ar->monitor_vdev_id = -1;
|
||||
-40
@@ -1,40 +0,0 @@
|
||||
From f3ca72b0327101a074a871539e61775d43908ca4 Mon Sep 17 00:00:00 2001
|
||||
From: Nagarajan Maran <quic_nmaran@quicinc.com>
|
||||
Date: Fri, 14 Oct 2022 21:20:54 +0530
|
||||
Subject: [PATCH] wifi: ath11k: fix monitor vdev creation with firmware
|
||||
recovery
|
||||
|
||||
During firmware recovery, the monitor interface is not
|
||||
getting created in the driver and firmware since
|
||||
the respective flags are not updated properly.
|
||||
|
||||
So after firmware recovery is successful, when monitor
|
||||
interface is brought down manually, firmware assertion
|
||||
is observed, since we are trying to bring down the
|
||||
interface which is not yet created in the firmware.
|
||||
|
||||
Fix this by updating the monitor flags properly per
|
||||
phy#, during firmware recovery.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Nagarajan Maran <quic_nmaran@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221014155054.11471-1-quic_nmaran@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -1704,6 +1704,10 @@ void ath11k_core_pre_reconfigure_recover
|
||||
ath11k_mac_tx_mgmt_pending_free, ar);
|
||||
idr_destroy(&ar->txmgmt_idr);
|
||||
wake_up(&ar->txmgmt_empty_waitq);
|
||||
+
|
||||
+ ar->monitor_vdev_id = -1;
|
||||
+ clear_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags);
|
||||
+ clear_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags);
|
||||
}
|
||||
|
||||
wake_up(&ab->wmi_ab.tx_credits_wq);
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
From ed3725e15a154ebebf44e0c34806c57525483f92 Mon Sep 17 00:00:00 2001
|
||||
From: Rahul Bhattacharjee <quic_rbhattac@quicinc.com>
|
||||
Date: Fri, 21 Oct 2022 14:31:26 +0530
|
||||
Subject: [PATCH] wifi: ath11k: Fix qmi_msg_handler data structure
|
||||
initialization
|
||||
|
||||
qmi_msg_handler is required to be null terminated by QMI module.
|
||||
There might be a case where a handler for a msg id is not present in the
|
||||
handlers array which can lead to infinite loop while searching the handler
|
||||
and therefore out of bound access in qmi_invoke_handler().
|
||||
Hence update the initialization in qmi_msg_handler data structure.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Rahul Bhattacharjee <quic_rbhattac@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221021090126.28626-1-quic_rbhattac@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/qmi.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
@@ -1702,6 +1702,9 @@ static struct qmi_elem_info qmi_wlfw_fw_
|
||||
.data_type = QMI_EOTI,
|
||||
.array_type = NO_ARRAY,
|
||||
},
|
||||
+
|
||||
+ /* end of list */
|
||||
+ {},
|
||||
};
|
||||
|
||||
static int ath11k_qmi_host_cap_send(struct ath11k_base *ab)
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
From 5bd2ced044bb95029d5c44cf7d23ced73e0fc05b Mon Sep 17 00:00:00 2001
|
||||
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Date: Sat, 26 Aug 2023 08:42:46 +0300
|
||||
Subject: [PATCH] wifi: ath11k: move references from rsvd2 to info fields
|
||||
|
||||
Remove references to reserved fields and add new info fields for
|
||||
struct hal_rx_ppdu_end_user_stats. Reserved fields should not be
|
||||
accessed, therefore existing references to it are to be changed to
|
||||
referencing specific info fields.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/1692827868-15667-1-git-send-email-quic_msinada@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/hal_rx.c | 10 +++++-----
|
||||
drivers/net/wireless/ath/ath11k/hal_rx.h | 11 ++++++++---
|
||||
2 files changed, 13 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
@@ -814,7 +814,7 @@ ath11k_hal_rx_handle_ofdma_info(void *rx
|
||||
|
||||
rx_user_status->ul_ofdma_user_v0_word0 = __le32_to_cpu(ppdu_end_user->info6);
|
||||
|
||||
- rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->rsvd2[10]);
|
||||
+ rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info9);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -825,11 +825,11 @@ ath11k_hal_rx_populate_byte_count(void *
|
||||
(struct hal_rx_ppdu_end_user_stats *)rx_tlv;
|
||||
|
||||
rx_user_status->mpdu_ok_byte_count =
|
||||
- FIELD_GET(HAL_RX_PPDU_END_USER_STATS_RSVD2_6_MPDU_OK_BYTE_COUNT,
|
||||
- __le32_to_cpu(ppdu_end_user->rsvd2[6]));
|
||||
+ FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT,
|
||||
+ __le32_to_cpu(ppdu_end_user->info7));
|
||||
rx_user_status->mpdu_err_byte_count =
|
||||
- FIELD_GET(HAL_RX_PPDU_END_USER_STATS_RSVD2_8_MPDU_ERR_BYTE_COUNT,
|
||||
- __le32_to_cpu(ppdu_end_user->rsvd2[8]));
|
||||
+ FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT,
|
||||
+ __le32_to_cpu(ppdu_end_user->info8));
|
||||
}
|
||||
|
||||
static inline void
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal_rx.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.h
|
||||
@@ -222,8 +222,8 @@ struct hal_rx_ppdu_start {
|
||||
#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP GENMASK(15, 0)
|
||||
#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP GENMASK(31, 16)
|
||||
|
||||
-#define HAL_RX_PPDU_END_USER_STATS_RSVD2_6_MPDU_OK_BYTE_COUNT GENMASK(24, 0)
|
||||
-#define HAL_RX_PPDU_END_USER_STATS_RSVD2_8_MPDU_ERR_BYTE_COUNT GENMASK(24, 0)
|
||||
+#define HAL_RX_PPDU_END_USER_STATS_INFO7_MPDU_OK_BYTE_COUNT GENMASK(24, 0)
|
||||
+#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_ERR_BYTE_COUNT GENMASK(24, 0)
|
||||
|
||||
struct hal_rx_ppdu_end_user_stats {
|
||||
__le32 rsvd0[2];
|
||||
@@ -236,7 +236,12 @@ struct hal_rx_ppdu_end_user_stats {
|
||||
__le32 info4;
|
||||
__le32 info5;
|
||||
__le32 info6;
|
||||
- __le32 rsvd2[11];
|
||||
+ __le32 rsvd2[5];
|
||||
+ __le32 info7;
|
||||
+ __le32 rsvd3;
|
||||
+ __le32 info8;
|
||||
+ __le32 rsvd3[2];
|
||||
+ __le32 info9;
|
||||
} __packed;
|
||||
|
||||
struct hal_rx_ppdu_end_user_stats_ext {
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
From 7791487cd16cafd018cba0bf73789111a9f16843 Mon Sep 17 00:00:00 2001
|
||||
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Date: Sat, 26 Aug 2023 08:42:46 +0300
|
||||
Subject: [PATCH] wifi: ath11k: fix tid bitmap is 0 in peer rx mu stats
|
||||
|
||||
Correct parsing of reading offset for rx tid 16 bit bitmap. Incorrect
|
||||
offset caused peer rx mu stats tid bitmap to always be zero. This
|
||||
correction is in the software context and does not affect the
|
||||
firmware interface.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/1692827868-15667-2-git-send-email-quic_msinada@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/hal_rx.c | 10 +++++-----
|
||||
drivers/net/wireless/ath/ath11k/hal_rx.h | 17 +++++++++--------
|
||||
2 files changed, 14 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
@@ -814,7 +814,7 @@ ath11k_hal_rx_handle_ofdma_info(void *rx
|
||||
|
||||
rx_user_status->ul_ofdma_user_v0_word0 = __le32_to_cpu(ppdu_end_user->info6);
|
||||
|
||||
- rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info9);
|
||||
+ rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info10);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -826,10 +826,10 @@ ath11k_hal_rx_populate_byte_count(void *
|
||||
|
||||
rx_user_status->mpdu_ok_byte_count =
|
||||
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT,
|
||||
- __le32_to_cpu(ppdu_end_user->info7));
|
||||
+ __le32_to_cpu(ppdu_end_user->info8));
|
||||
rx_user_status->mpdu_err_byte_count =
|
||||
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT,
|
||||
- __le32_to_cpu(ppdu_end_user->info8));
|
||||
+ __le32_to_cpu(ppdu_end_user->info9));
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -903,8 +903,8 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
|
||||
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX,
|
||||
__le32_to_cpu(eu_stats->info2));
|
||||
ppdu_info->tid =
|
||||
- ffs(FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP,
|
||||
- __le32_to_cpu(eu_stats->info6))) - 1;
|
||||
+ ffs(FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO7_TID_BITMAP,
|
||||
+ __le32_to_cpu(eu_stats->info7))) - 1;
|
||||
ppdu_info->tcp_msdu_count =
|
||||
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO4_TCP_MSDU_CNT,
|
||||
__le32_to_cpu(eu_stats->info4));
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal_rx.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.h
|
||||
@@ -149,7 +149,7 @@ struct hal_rx_mon_ppdu_info {
|
||||
u8 beamformed;
|
||||
u8 rssi_comb;
|
||||
u8 rssi_chain_pri20[HAL_RX_MAX_NSS];
|
||||
- u8 tid;
|
||||
+ u16 tid;
|
||||
u16 ht_flags;
|
||||
u16 vht_flags;
|
||||
u16 he_flags;
|
||||
@@ -219,11 +219,11 @@ struct hal_rx_ppdu_start {
|
||||
#define HAL_RX_PPDU_END_USER_STATS_INFO5_OTHER_MSDU_CNT GENMASK(15, 0)
|
||||
#define HAL_RX_PPDU_END_USER_STATS_INFO5_TCP_ACK_MSDU_CNT GENMASK(31, 16)
|
||||
|
||||
-#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP GENMASK(15, 0)
|
||||
-#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP GENMASK(31, 16)
|
||||
+#define HAL_RX_PPDU_END_USER_STATS_INFO7_TID_BITMAP GENMASK(15, 0)
|
||||
+#define HAL_RX_PPDU_END_USER_STATS_INFO7_TID_EOSP_BITMAP GENMASK(31, 16)
|
||||
|
||||
-#define HAL_RX_PPDU_END_USER_STATS_INFO7_MPDU_OK_BYTE_COUNT GENMASK(24, 0)
|
||||
-#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_ERR_BYTE_COUNT GENMASK(24, 0)
|
||||
+#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT GENMASK(24, 0)
|
||||
+#define HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT GENMASK(24, 0)
|
||||
|
||||
struct hal_rx_ppdu_end_user_stats {
|
||||
__le32 rsvd0[2];
|
||||
@@ -236,12 +236,13 @@ struct hal_rx_ppdu_end_user_stats {
|
||||
__le32 info4;
|
||||
__le32 info5;
|
||||
__le32 info6;
|
||||
- __le32 rsvd2[5];
|
||||
__le32 info7;
|
||||
- __le32 rsvd3;
|
||||
+ __le32 rsvd2[4];
|
||||
__le32 info8;
|
||||
- __le32 rsvd3[2];
|
||||
+ __le32 rsvd3;
|
||||
__le32 info9;
|
||||
+ __le32 rsvd4[2];
|
||||
+ __le32 info10;
|
||||
} __packed;
|
||||
|
||||
struct hal_rx_ppdu_end_user_stats_ext {
|
||||
-341
@@ -1,341 +0,0 @@
|
||||
From 93c1592889fca46d09d833455628bab05516cdbf Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Date: Wed, 14 Sep 2022 17:23:03 -0700
|
||||
Subject: [PATCH] wifi: ath11k: Make QMI message rules const
|
||||
|
||||
Commit ff6d365898d4 ("soc: qcom: qmi: use const for struct
|
||||
qmi_elem_info") allows QMI message encoding/decoding rules to be
|
||||
const, so do that for ath11k.
|
||||
|
||||
Compile tested only.
|
||||
|
||||
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20220915002303.12206-1-quic_jjohnson@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/qmi.c | 72 +++++++++++++--------------
|
||||
1 file changed, 36 insertions(+), 36 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
@@ -29,7 +29,7 @@ module_param_named(cold_boot_cal, ath11k
|
||||
MODULE_PARM_DESC(cold_boot_cal,
|
||||
"Decrease the channel switch time but increase the driver load time (Default: true)");
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_host_cap_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_host_cap_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_OPT_FLAG,
|
||||
.elem_len = 1,
|
||||
@@ -280,7 +280,7 @@ static struct qmi_elem_info qmi_wlanfw_h
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_host_cap_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_host_cap_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -297,7 +297,7 @@ static struct qmi_elem_info qmi_wlanfw_h
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_ind_register_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_ind_register_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_OPT_FLAG,
|
||||
.elem_len = 1,
|
||||
@@ -522,7 +522,7 @@ static struct qmi_elem_info qmi_wlanfw_i
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_ind_register_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_ind_register_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -558,7 +558,7 @@ static struct qmi_elem_info qmi_wlanfw_i
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_mem_cfg_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_mem_cfg_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_8_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -590,7 +590,7 @@ static struct qmi_elem_info qmi_wlanfw_m
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_mem_seg_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_mem_seg_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -632,7 +632,7 @@ static struct qmi_elem_info qmi_wlanfw_m
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_request_mem_ind_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_request_mem_ind_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_DATA_LEN,
|
||||
.elem_len = 1,
|
||||
@@ -659,7 +659,7 @@ static struct qmi_elem_info qmi_wlanfw_r
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_mem_seg_resp_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_mem_seg_resp_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_8_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -699,7 +699,7 @@ static struct qmi_elem_info qmi_wlanfw_m
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_respond_mem_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_respond_mem_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_DATA_LEN,
|
||||
.elem_len = 1,
|
||||
@@ -726,7 +726,7 @@ static struct qmi_elem_info qmi_wlanfw_r
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_respond_mem_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_respond_mem_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -744,7 +744,7 @@ static struct qmi_elem_info qmi_wlanfw_r
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_cap_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_cap_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_EOTI,
|
||||
.array_type = NO_ARRAY,
|
||||
@@ -752,7 +752,7 @@ static struct qmi_elem_info qmi_wlanfw_c
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_device_info_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_device_info_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_EOTI,
|
||||
.array_type = NO_ARRAY,
|
||||
@@ -760,7 +760,7 @@ static struct qmi_elem_info qmi_wlanfw_d
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlfw_device_info_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlfw_device_info_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -814,7 +814,7 @@ static struct qmi_elem_info qmi_wlfw_dev
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_rf_chip_info_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_rf_chip_info_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -840,7 +840,7 @@ static struct qmi_elem_info qmi_wlanfw_r
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_rf_board_info_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_rf_board_info_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -857,7 +857,7 @@ static struct qmi_elem_info qmi_wlanfw_r
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_soc_info_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_soc_info_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -873,7 +873,7 @@ static struct qmi_elem_info qmi_wlanfw_s
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_fw_version_info_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_fw_version_info_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -899,7 +899,7 @@ static struct qmi_elem_info qmi_wlanfw_f
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_cap_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_cap_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -1100,7 +1100,7 @@ static struct qmi_elem_info qmi_wlanfw_c
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_bdf_download_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_bdf_download_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_1_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -1235,7 +1235,7 @@ static struct qmi_elem_info qmi_wlanfw_b
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_bdf_download_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_bdf_download_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -1253,7 +1253,7 @@ static struct qmi_elem_info qmi_wlanfw_b
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_m3_info_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_m3_info_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_8_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -1277,7 +1277,7 @@ static struct qmi_elem_info qmi_wlanfw_m
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_m3_info_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_m3_info_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -1294,7 +1294,7 @@ static struct qmi_elem_info qmi_wlanfw_m
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_ce_tgt_pipe_cfg_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_ce_tgt_pipe_cfg_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -1347,7 +1347,7 @@ static struct qmi_elem_info qmi_wlanfw_c
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_ce_svc_pipe_cfg_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_ce_svc_pipe_cfg_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -1382,7 +1382,7 @@ static struct qmi_elem_info qmi_wlanfw_c
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_shadow_reg_cfg_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_shadow_reg_cfg_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_2_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -1406,7 +1406,7 @@ static struct qmi_elem_info qmi_wlanfw_s
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_shadow_reg_v2_cfg_s_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_shadow_reg_v2_cfg_s_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -1423,7 +1423,7 @@ static struct qmi_elem_info qmi_wlanfw_s
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_wlan_mode_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_wlan_mode_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_UNSIGNED_4_BYTE,
|
||||
.elem_len = 1,
|
||||
@@ -1458,7 +1458,7 @@ static struct qmi_elem_info qmi_wlanfw_w
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_wlan_mode_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_wlan_mode_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -1476,7 +1476,7 @@ static struct qmi_elem_info qmi_wlanfw_w
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_wlan_cfg_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_wlan_cfg_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_OPT_FLAG,
|
||||
.elem_len = 1,
|
||||
@@ -1615,7 +1615,7 @@ static struct qmi_elem_info qmi_wlanfw_w
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_wlan_cfg_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_wlan_cfg_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -1632,28 +1632,28 @@ static struct qmi_elem_info qmi_wlanfw_w
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_mem_ready_ind_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_mem_ready_ind_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_EOTI,
|
||||
.array_type = NO_ARRAY,
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_fw_ready_ind_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_fw_ready_ind_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_EOTI,
|
||||
.array_type = NO_ARRAY,
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_cold_boot_cal_done_ind_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_cold_boot_cal_done_ind_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_EOTI,
|
||||
.array_type = NO_ARRAY,
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_wlan_ini_req_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_wlan_ini_req_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_OPT_FLAG,
|
||||
.elem_len = 1,
|
||||
@@ -1679,7 +1679,7 @@ static struct qmi_elem_info qmi_wlanfw_w
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlanfw_wlan_ini_resp_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlanfw_wlan_ini_resp_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_STRUCT,
|
||||
.elem_len = 1,
|
||||
@@ -1697,7 +1697,7 @@ static struct qmi_elem_info qmi_wlanfw_w
|
||||
},
|
||||
};
|
||||
|
||||
-static struct qmi_elem_info qmi_wlfw_fw_init_done_ind_msg_v01_ei[] = {
|
||||
+static const struct qmi_elem_info qmi_wlfw_fw_init_done_ind_msg_v01_ei[] = {
|
||||
{
|
||||
.data_type = QMI_EOTI,
|
||||
.array_type = NO_ARRAY,
|
||||
-119
@@ -1,119 +0,0 @@
|
||||
From a018750a2cceaf4427c4ee3d9ce3e83a171d5bd6 Mon Sep 17 00:00:00 2001
|
||||
From: Youghandhar Chintala <quic_youghand@quicinc.com>
|
||||
Date: Fri, 4 Nov 2022 14:24:03 +0530
|
||||
Subject: [PATCH] wifi: ath11k: Trigger sta disconnect on hardware restart
|
||||
|
||||
Currently after the hardware restart triggered from the driver, the
|
||||
station interface connection remains intact, since a disconnect trigger
|
||||
is not sent to userspace. This can lead to a problem in targets where
|
||||
the wifi mac sequence is added by the firmware.
|
||||
|
||||
After the target restart, its wifi mac sequence number gets reset to
|
||||
zero. Hence AP to which our device is connected will receive frames with
|
||||
a wifi mac sequence number jump to the past, thereby resulting in the
|
||||
AP dropping all these frames, until the frame arrives with a wifi mac
|
||||
sequence number which AP was expecting.
|
||||
|
||||
To avoid such frame drops, its better to trigger a station disconnect
|
||||
upon target hardware restart which can be done with API
|
||||
ieee80211_reconfig_disconnect exposed to mac80211.
|
||||
|
||||
The other targets are not affected by this change, since the hardware
|
||||
params flag is not set.
|
||||
|
||||
Reported-by: kernel test robot <lkp@intel.com>
|
||||
|
||||
Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1
|
||||
|
||||
Signed-off-by: Youghandhar Chintala <quic_youghand@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221104085403.11025-1-quic_youghand@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 6 ++++++
|
||||
drivers/net/wireless/ath/ath11k/hw.h | 1 +
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 7 +++++++
|
||||
3 files changed, 14 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -195,6 +195,7 @@ static const struct ath11k_hw_params ath
|
||||
.tcl_ring_retry = true,
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
+ .support_fw_mac_sequence = false,
|
||||
},
|
||||
{
|
||||
.name = "qca6390 hw2.0",
|
||||
@@ -277,6 +278,7 @@ static const struct ath11k_hw_params ath
|
||||
.tcl_ring_retry = true,
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
+ .support_fw_mac_sequence = true,
|
||||
},
|
||||
{
|
||||
.name = "qcn9074 hw1.0",
|
||||
@@ -356,6 +358,7 @@ static const struct ath11k_hw_params ath
|
||||
.tcl_ring_retry = true,
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
+ .support_fw_mac_sequence = false,
|
||||
},
|
||||
{
|
||||
.name = "wcn6855 hw2.0",
|
||||
@@ -438,6 +441,7 @@ static const struct ath11k_hw_params ath
|
||||
.tcl_ring_retry = true,
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
+ .support_fw_mac_sequence = true,
|
||||
},
|
||||
{
|
||||
.name = "wcn6855 hw2.1",
|
||||
@@ -519,6 +523,7 @@ static const struct ath11k_hw_params ath
|
||||
.tcl_ring_retry = true,
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
+ .support_fw_mac_sequence = true,
|
||||
},
|
||||
{
|
||||
.name = "wcn6750 hw1.0",
|
||||
@@ -597,6 +602,7 @@ static const struct ath11k_hw_params ath
|
||||
.tcl_ring_retry = false,
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE_WCN6750,
|
||||
.smp2p_wow_exit = true,
|
||||
+ .support_fw_mac_sequence = true,
|
||||
},
|
||||
};
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
||||
@@ -219,6 +219,7 @@ struct ath11k_hw_params {
|
||||
bool tcl_ring_retry;
|
||||
u32 tx_ring_size;
|
||||
bool smp2p_wow_exit;
|
||||
+ bool support_fw_mac_sequence;
|
||||
};
|
||||
|
||||
struct ath11k_hw_ops {
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -8014,6 +8014,7 @@ ath11k_mac_op_reconfig_complete(struct i
|
||||
struct ath11k *ar = hw->priv;
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
int recovery_count;
|
||||
+ struct ath11k_vif *arvif;
|
||||
|
||||
if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
|
||||
return;
|
||||
@@ -8049,6 +8050,12 @@ ath11k_mac_op_reconfig_complete(struct i
|
||||
ath11k_dbg(ab, ATH11K_DBG_BOOT, "reset success\n");
|
||||
}
|
||||
}
|
||||
+ if (ar->ab->hw_params.support_fw_mac_sequence) {
|
||||
+ list_for_each_entry(arvif, &ar->arvifs, list) {
|
||||
+ if (arvif->is_up && arvif->vdev_type == WMI_VDEV_TYPE_STA)
|
||||
+ ieee80211_hw_restart_disconnect(arvif->vif);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
-103
@@ -1,103 +0,0 @@
|
||||
From e44de90453bb2b46a523df78c39eb896bab35dcd Mon Sep 17 00:00:00 2001
|
||||
From: Govindaraj Saminathan <quic_gsaminat@quicinc.com>
|
||||
Date: Tue, 29 Nov 2022 13:04:02 +0200
|
||||
Subject: [PATCH] wifi: ath11k: Fix race condition with struct
|
||||
htt_ppdu_stats_info
|
||||
|
||||
A crash happens when running the traffic with multiple clients:
|
||||
|
||||
Crash Signature : Unable to handle kernel paging request at
|
||||
virtual address ffffffd700970918 During the crash, PC points to
|
||||
"ieee80211_tx_rate_update+0x30/0x68 [mac80211]"
|
||||
LR points to "ath11k_dp_htt_htc_t2h_msg_handler+0x5a8/0x8a0 [ath11k]".
|
||||
|
||||
Struct ppdu_stats_info is allocated and accessed from event callback via copy
|
||||
engine tasklet, this has a problem when freeing it from ath11k_mac_op_stop().
|
||||
|
||||
Use data_lock during entire ath11k_dp_htt_get_ppdu_desc() call to protect
|
||||
struct htt_ppdu_stats_info access and to avoid race condition when accessing it
|
||||
from ath11k_mac_op_stop().
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Govindaraj Saminathan <quic_gsaminat@quicinc.com>
|
||||
Co-developed-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221124071104.22506-1-quic_kathirve@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/dp_rx.c | 22 +++++++++++-----------
|
||||
1 file changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
@@ -1535,13 +1535,12 @@ struct htt_ppdu_stats_info *ath11k_dp_ht
|
||||
{
|
||||
struct htt_ppdu_stats_info *ppdu_info;
|
||||
|
||||
- spin_lock_bh(&ar->data_lock);
|
||||
+ lockdep_assert_held(&ar->data_lock);
|
||||
+
|
||||
if (!list_empty(&ar->ppdu_stats_info)) {
|
||||
list_for_each_entry(ppdu_info, &ar->ppdu_stats_info, list) {
|
||||
- if (ppdu_info->ppdu_id == ppdu_id) {
|
||||
- spin_unlock_bh(&ar->data_lock);
|
||||
+ if (ppdu_info->ppdu_id == ppdu_id)
|
||||
return ppdu_info;
|
||||
- }
|
||||
}
|
||||
|
||||
if (ar->ppdu_stat_list_depth > HTT_PPDU_DESC_MAX_DEPTH) {
|
||||
@@ -1553,16 +1552,13 @@ struct htt_ppdu_stats_info *ath11k_dp_ht
|
||||
kfree(ppdu_info);
|
||||
}
|
||||
}
|
||||
- spin_unlock_bh(&ar->data_lock);
|
||||
|
||||
ppdu_info = kzalloc(sizeof(*ppdu_info), GFP_ATOMIC);
|
||||
if (!ppdu_info)
|
||||
return NULL;
|
||||
|
||||
- spin_lock_bh(&ar->data_lock);
|
||||
list_add_tail(&ppdu_info->list, &ar->ppdu_stats_info);
|
||||
ar->ppdu_stat_list_depth++;
|
||||
- spin_unlock_bh(&ar->data_lock);
|
||||
|
||||
return ppdu_info;
|
||||
}
|
||||
@@ -1586,16 +1582,17 @@ static int ath11k_htt_pull_ppdu_stats(st
|
||||
ar = ath11k_mac_get_ar_by_pdev_id(ab, pdev_id);
|
||||
if (!ar) {
|
||||
ret = -EINVAL;
|
||||
- goto exit;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
if (ath11k_debugfs_is_pktlog_lite_mode_enabled(ar))
|
||||
trace_ath11k_htt_ppdu_stats(ar, skb->data, len);
|
||||
|
||||
+ spin_lock_bh(&ar->data_lock);
|
||||
ppdu_info = ath11k_dp_htt_get_ppdu_desc(ar, ppdu_id);
|
||||
if (!ppdu_info) {
|
||||
ret = -EINVAL;
|
||||
- goto exit;
|
||||
+ goto out_unlock_data;
|
||||
}
|
||||
|
||||
ppdu_info->ppdu_id = ppdu_id;
|
||||
@@ -1604,10 +1601,13 @@ static int ath11k_htt_pull_ppdu_stats(st
|
||||
(void *)ppdu_info);
|
||||
if (ret) {
|
||||
ath11k_warn(ab, "Failed to parse tlv %d\n", ret);
|
||||
- goto exit;
|
||||
+ goto out_unlock_data;
|
||||
}
|
||||
|
||||
-exit:
|
||||
+out_unlock_data:
|
||||
+ spin_unlock_bh(&ar->data_lock);
|
||||
+
|
||||
+out:
|
||||
rcu_read_unlock();
|
||||
|
||||
return ret;
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
From ac13a7842ab46a87aa315514d6d7e19b03cb2adc Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Date: Wed, 6 Sep 2023 12:36:55 +0300
|
||||
Subject: [PATCH] wifi: ath11k: drop NULL pointer check in
|
||||
ath11k_update_per_peer_tx_stats()
|
||||
|
||||
Since 'user_stats' is a fixed-size array of 'struct htt_ppdu_user_stats'
|
||||
in 'struct htt_ppdu_stats', any of its member can't be NULL and so
|
||||
relevant check may be dropped.
|
||||
|
||||
Found by Linux Verification Center (linuxtesting.org) with SVACE.
|
||||
|
||||
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230906093704.14001-1-dmantipov@yandex.ru
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/dp_rx.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
@@ -1388,9 +1388,6 @@ ath11k_update_per_peer_tx_stats(struct a
|
||||
u8 tid = HTT_PPDU_STATS_NON_QOS_TID;
|
||||
bool is_ampdu = false;
|
||||
|
||||
- if (!usr_stats)
|
||||
- return;
|
||||
-
|
||||
if (!(usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_RATE)))
|
||||
return;
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
From 82ae3f4635382ff23e2ece55b5d5e713223951ec Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Date: Thu, 24 Aug 2023 10:50:44 +0300
|
||||
Subject: [PATCH] wifi: ath11k: drop redundant check in
|
||||
ath11k_dp_rx_mon_dest_process()
|
||||
|
||||
In 'ath11k_dp_rx_mon_dest_process()', 'mon_dst_srng' points to
|
||||
a member of 'srng_list', which is a fixed-size array inside
|
||||
'struct ath11k_hal'. This way, if 'ring_id' is valid (i. e.
|
||||
between 0 and HAL_SRNG_RING_ID_MAX - 1 inclusive), 'mon_dst_srng'
|
||||
can't be NULL and so relevant check may be dropped.
|
||||
|
||||
Found by Linux Verification Center (linuxtesting.org) with SVACE.
|
||||
|
||||
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230824075121.121144-1-dmantipov@yandex.ru
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/dp_rx.c | 7 -------
|
||||
1 file changed, 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
@@ -5100,13 +5100,6 @@ static void ath11k_dp_rx_mon_dest_proces
|
||||
|
||||
mon_dst_srng = &ar->ab->hal.srng_list[ring_id];
|
||||
|
||||
- if (!mon_dst_srng) {
|
||||
- ath11k_warn(ar->ab,
|
||||
- "HAL Monitor Destination Ring Init Failed -- %p",
|
||||
- mon_dst_srng);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
spin_lock_bh(&pmon->mon_lock);
|
||||
|
||||
ath11k_hal_srng_access_begin(ar->ab, mon_dst_srng);
|
||||
-125
@@ -1,125 +0,0 @@
|
||||
From 8dfe875aa24aec68baf6702018633c84c2c1feca Mon Sep 17 00:00:00 2001
|
||||
From: Sriram R <quic_srirrama@quicinc.com>
|
||||
Date: Fri, 2 Dec 2022 23:37:13 +0200
|
||||
Subject: [PATCH] wifi: ath11k: update hw params for IPQ5018
|
||||
|
||||
Add new compatible string for IPQ5018 and add
|
||||
required hw params for IPQ5018. The hw descriptors size and
|
||||
datapath ops are similar to QCN9074, hence reuse the same.
|
||||
|
||||
Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
|
||||
Co-developed-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221122132152.17771-3-quic_kathirve@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 71 ++++++++++++++++++++++++++
|
||||
drivers/net/wireless/ath/ath11k/core.h | 8 +++
|
||||
2 files changed, 79 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -604,6 +604,77 @@ static const struct ath11k_hw_params ath
|
||||
.smp2p_wow_exit = true,
|
||||
.support_fw_mac_sequence = true,
|
||||
},
|
||||
+ {
|
||||
+ .hw_rev = ATH11K_HW_IPQ5018_HW10,
|
||||
+ .name = "ipq5018 hw1.0",
|
||||
+ .fw = {
|
||||
+ .dir = "IPQ5018/hw1.0",
|
||||
+ .board_size = 256 * 1024,
|
||||
+ .cal_offset = 128 * 1024,
|
||||
+ },
|
||||
+ .max_radios = MAX_RADIOS_5018,
|
||||
+ .bdf_addr = 0x4BA00000,
|
||||
+ /* hal_desc_sz and hw ops are similar to qcn9074 */
|
||||
+ .hal_desc_sz = sizeof(struct hal_rx_desc_qcn9074),
|
||||
+ .qmi_service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_IPQ8074,
|
||||
+ .ring_mask = &ath11k_hw_ring_mask_ipq8074,
|
||||
+ .credit_flow = false,
|
||||
+ .max_tx_ring = 1,
|
||||
+ .spectral = {
|
||||
+ .fft_sz = 2,
|
||||
+ .fft_pad_sz = 0,
|
||||
+ .summary_pad_sz = 16,
|
||||
+ .fft_hdr_len = 24,
|
||||
+ .max_fft_bins = 1024,
|
||||
+ },
|
||||
+ .internal_sleep_clock = false,
|
||||
+ .host_ce_config = ath11k_host_ce_config_qcn9074,
|
||||
+ .ce_count = CE_CNT_5018,
|
||||
+ .rxdma1_enable = true,
|
||||
+ .num_rxmda_per_pdev = RXDMA_PER_PDEV_5018,
|
||||
+ .rx_mac_buf_ring = false,
|
||||
+ .vdev_start_delay = false,
|
||||
+ .htt_peer_map_v2 = true,
|
||||
+ .interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
||||
+ BIT(NL80211_IFTYPE_AP) |
|
||||
+ BIT(NL80211_IFTYPE_MESH_POINT),
|
||||
+ .supports_monitor = false,
|
||||
+ .supports_sta_ps = false,
|
||||
+ .supports_shadow_regs = false,
|
||||
+ .fw_mem_mode = 0,
|
||||
+ .num_vdevs = 16 + 1,
|
||||
+ .num_peers = 512,
|
||||
+ .supports_regdb = false,
|
||||
+ .idle_ps = false,
|
||||
+ .supports_suspend = false,
|
||||
+ .hal_params = &ath11k_hw_hal_params_ipq8074,
|
||||
+ .single_pdev_only = false,
|
||||
+ .cold_boot_calib = true,
|
||||
+ .fix_l1ss = true,
|
||||
+ .supports_dynamic_smps_6ghz = false,
|
||||
+ .alloc_cacheable_memory = true,
|
||||
+ .supports_rssi_stats = false,
|
||||
+ .fw_wmi_diag_event = false,
|
||||
+ .current_cc_support = false,
|
||||
+ .dbr_debug_support = true,
|
||||
+ .global_reset = false,
|
||||
+ .bios_sar_capa = NULL,
|
||||
+ .m3_fw_support = false,
|
||||
+ .fixed_bdf_addr = true,
|
||||
+ .fixed_mem_region = true,
|
||||
+ .static_window_map = false,
|
||||
+ .hybrid_bus_type = false,
|
||||
+ .fixed_fw_mem = false,
|
||||
+ .support_off_channel_tx = false,
|
||||
+ .supports_multi_bssid = false,
|
||||
+
|
||||
+ .sram_dump = {},
|
||||
+
|
||||
+ .tcl_ring_retry = true,
|
||||
+ .tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
+ .smp2p_wow_exit = false,
|
||||
+ .support_fw_mac_sequence = false,
|
||||
+ },
|
||||
};
|
||||
|
||||
static inline struct ath11k_pdev *ath11k_core_get_single_pdev(struct ath11k_base *ab)
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -142,6 +142,7 @@ enum ath11k_hw_rev {
|
||||
ATH11K_HW_WCN6855_HW20,
|
||||
ATH11K_HW_WCN6855_HW21,
|
||||
ATH11K_HW_WCN6750_HW10,
|
||||
+ ATH11K_HW_IPQ5018_HW10,
|
||||
};
|
||||
|
||||
enum ath11k_firmware_mode {
|
||||
@@ -230,6 +231,13 @@ struct ath11k_he {
|
||||
|
||||
#define MAX_RADIOS 3
|
||||
|
||||
+/* ipq5018 hw param macros */
|
||||
+#define MAX_RADIOS_5018 1
|
||||
+#define CE_CNT_5018 6
|
||||
+#define TARGET_CE_CNT_5018 9
|
||||
+#define SVC_CE_MAP_LEN_5018 17
|
||||
+#define RXDMA_PER_PDEV_5018 1
|
||||
+
|
||||
enum {
|
||||
WMI_HOST_TP_SCALE_MAX = 0,
|
||||
WMI_HOST_TP_SCALE_50 = 1,
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
From 9066794113c4813b6ce4a66ed6ce14ecdf35625d Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Date: Thu, 24 Aug 2023 10:50:45 +0300
|
||||
Subject: [PATCH] wifi: ath11k: remove unused members of 'struct ath11k_base'
|
||||
|
||||
Remove set but otherwise unused 'wlan_init_status' and
|
||||
'wmi_ready' members of 'struct ath11k_base', adjust
|
||||
'ath11k_wmi_tlv_rdy_parse()' accordingly.
|
||||
|
||||
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230824075121.121144-2-dmantipov@yandex.ru
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.h | 2 --
|
||||
drivers/net/wireless/ath/ath11k/wmi.c | 2 --
|
||||
2 files changed, 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -901,8 +901,6 @@ struct ath11k_base {
|
||||
struct list_head peers;
|
||||
wait_queue_head_t peer_mapping_wq;
|
||||
u8 mac_addr[ETH_ALEN];
|
||||
- bool wmi_ready;
|
||||
- u32 wlan_init_status;
|
||||
int irq_num[ATH11K_IRQ_NUM_MAX];
|
||||
struct ath11k_ext_irq_grp ext_irq_grp[ATH11K_EXT_IRQ_GRP_NUM_MAX];
|
||||
struct ath11k_targ_cap target_caps;
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -7222,14 +7222,12 @@ static int ath11k_wmi_tlv_rdy_parse(stru
|
||||
memset(&fixed_param, 0, sizeof(fixed_param));
|
||||
memcpy(&fixed_param, (struct wmi_ready_event *)ptr,
|
||||
min_t(u16, sizeof(fixed_param), len));
|
||||
- ab->wlan_init_status = fixed_param.ready_event_min.status;
|
||||
rdy_parse->num_extra_mac_addr =
|
||||
fixed_param.ready_event_min.num_extra_mac_addr;
|
||||
|
||||
ether_addr_copy(ab->mac_addr,
|
||||
fixed_param.ready_event_min.mac_addr.addr);
|
||||
ab->pktlog_defs_checksum = fixed_param.pktlog_defs_checksum;
|
||||
- ab->wmi_ready = true;
|
||||
break;
|
||||
case WMI_TAG_ARRAY_FIXED_STRUCT:
|
||||
addr_list = (struct wmi_mac_addr *)ptr;
|
||||
-246
@@ -1,246 +0,0 @@
|
||||
From 26af7aabd2d8225c6b2056234626ba5099610871 Mon Sep 17 00:00:00 2001
|
||||
From: Sriram R <quic_srirrama@quicinc.com>
|
||||
Date: Fri, 2 Dec 2022 23:37:14 +0200
|
||||
Subject: [PATCH] wifi: ath11k: update ce configurations for IPQ5018
|
||||
|
||||
IPQ5018 is a single pdev device. Update host
|
||||
and target CE configurations accordingly.
|
||||
|
||||
Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
|
||||
Co-developed-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221122132152.17771-4-quic_kathirve@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 4 +
|
||||
drivers/net/wireless/ath/ath11k/core.h | 3 +
|
||||
drivers/net/wireless/ath/ath11k/hw.c | 191 +++++++++++++++++++++++++
|
||||
3 files changed, 198 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -630,6 +630,10 @@ static const struct ath11k_hw_params ath
|
||||
.internal_sleep_clock = false,
|
||||
.host_ce_config = ath11k_host_ce_config_qcn9074,
|
||||
.ce_count = CE_CNT_5018,
|
||||
+ .target_ce_config = ath11k_target_ce_config_wlan_ipq5018,
|
||||
+ .target_ce_count = TARGET_CE_CNT_5018,
|
||||
+ .svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_ipq5018,
|
||||
+ .svc_to_ce_map_len = SVC_CE_MAP_LEN_5018,
|
||||
.rxdma1_enable = true,
|
||||
.num_rxmda_per_pdev = RXDMA_PER_PDEV_5018,
|
||||
.rx_mac_buf_ring = false,
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -1145,6 +1145,9 @@ extern const struct service_to_pipe ath1
|
||||
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[];
|
||||
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[];
|
||||
|
||||
+extern const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq5018[];
|
||||
+extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq5018[];
|
||||
+
|
||||
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qcn9074[];
|
||||
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qcn9074[];
|
||||
int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab);
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.c
|
||||
@@ -1972,6 +1972,197 @@ const struct ath11k_hw_ring_mask ath11k_
|
||||
},
|
||||
};
|
||||
|
||||
+/* Target firmware's Copy Engine configuration for IPQ5018 */
|
||||
+const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq5018[] = {
|
||||
+ /* CE0: host->target HTC control and raw streams */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(0),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
||||
+ .nentries = __cpu_to_le32(32),
|
||||
+ .nbytes_max = __cpu_to_le32(2048),
|
||||
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+
|
||||
+ /* CE1: target->host HTT + HTC control */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(1),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
||||
+ .nentries = __cpu_to_le32(32),
|
||||
+ .nbytes_max = __cpu_to_le32(2048),
|
||||
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+
|
||||
+ /* CE2: target->host WMI */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(2),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
||||
+ .nentries = __cpu_to_le32(32),
|
||||
+ .nbytes_max = __cpu_to_le32(2048),
|
||||
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+
|
||||
+ /* CE3: host->target WMI */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(3),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
||||
+ .nentries = __cpu_to_le32(32),
|
||||
+ .nbytes_max = __cpu_to_le32(2048),
|
||||
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+
|
||||
+ /* CE4: host->target HTT */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(4),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
||||
+ .nentries = __cpu_to_le32(256),
|
||||
+ .nbytes_max = __cpu_to_le32(256),
|
||||
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+
|
||||
+ /* CE5: target->host Pktlog */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(5),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
||||
+ .nentries = __cpu_to_le32(32),
|
||||
+ .nbytes_max = __cpu_to_le32(2048),
|
||||
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+
|
||||
+ /* CE6: Reserved for target autonomous hif_memcpy */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(6),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
||||
+ .nentries = __cpu_to_le32(32),
|
||||
+ .nbytes_max = __cpu_to_le32(16384),
|
||||
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+
|
||||
+ /* CE7 used only by Host */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(7),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
||||
+ .nentries = __cpu_to_le32(32),
|
||||
+ .nbytes_max = __cpu_to_le32(2048),
|
||||
+ .flags = __cpu_to_le32(0x2000),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+
|
||||
+ /* CE8 target->host used only by IPA */
|
||||
+ {
|
||||
+ .pipenum = __cpu_to_le32(8),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
||||
+ .nentries = __cpu_to_le32(32),
|
||||
+ .nbytes_max = __cpu_to_le32(16384),
|
||||
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
||||
+ .reserved = __cpu_to_le32(0),
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+/* Map from service/endpoint to Copy Engine for IPQ5018.
|
||||
+ * This table is derived from the CE TABLE, above.
|
||||
+ * It is passed to the Target at startup for use by firmware.
|
||||
+ */
|
||||
+const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq5018[] = {
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
+ .pipenum = __cpu_to_le32(3),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(2),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
+ .pipenum = __cpu_to_le32(3),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(2),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
+ .pipenum = __cpu_to_le32(3),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(2),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
+ .pipenum = __cpu_to_le32(3),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(2),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
+ .pipenum = __cpu_to_le32(3),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(2),
|
||||
+ },
|
||||
+
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
+ .pipenum = __cpu_to_le32(0),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(1),
|
||||
+ },
|
||||
+
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
+ .pipenum = __cpu_to_le32(0),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(1),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
+ .pipenum = __cpu_to_le32(4),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(1),
|
||||
+ },
|
||||
+ {
|
||||
+ .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
|
||||
+ .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
+ .pipenum = __cpu_to_le32(5),
|
||||
+ },
|
||||
+
|
||||
+ /* (Additions here) */
|
||||
+
|
||||
+ { /* terminator entry */ }
|
||||
+};
|
||||
+
|
||||
const struct ath11k_hw_regs ipq8074_regs = {
|
||||
/* SW2TCL(x) R0 ring configuration address */
|
||||
.hal_tcl1_ring_base_lsb = 0x00000510,
|
||||
-351
@@ -1,351 +0,0 @@
|
||||
From b42b3678c91f3ca6e0888bf5a15c1e8678fd5f2d Mon Sep 17 00:00:00 2001
|
||||
From: Sriram R <quic_srirrama@quicinc.com>
|
||||
Date: Fri, 2 Dec 2022 23:37:14 +0200
|
||||
Subject: [PATCH] wifi: ath11k: remap ce register space for IPQ5018
|
||||
|
||||
In IPQ5018 ce register space is moved out of wcss unlike
|
||||
ipq8074 or ipq6018 and the space is not contiguous,
|
||||
hence remap the CE registers to a new space to access them.
|
||||
|
||||
Register read/write is modified to check if the register to be written
|
||||
falls in the CE register space and corresponding register is written.
|
||||
Also adjust the interrupt register address to ce irq enable/disable.
|
||||
|
||||
Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
|
||||
Co-developed-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221122132152.17771-5-quic_kathirve@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/ahb.c | 44 ++++++++++++++++++++++----
|
||||
drivers/net/wireless/ath/ath11k/ce.h | 16 ++++++++++
|
||||
drivers/net/wireless/ath/ath11k/core.c | 8 +++++
|
||||
drivers/net/wireless/ath/ath11k/core.h | 1 +
|
||||
drivers/net/wireless/ath/ath11k/hal.c | 17 ++++++----
|
||||
drivers/net/wireless/ath/ath11k/hal.h | 5 +++
|
||||
drivers/net/wireless/ath/ath11k/hw.c | 17 ++++++++++
|
||||
drivers/net/wireless/ath/ath11k/hw.h | 9 ++++++
|
||||
drivers/net/wireless/ath/ath11k/pci.c | 2 ++
|
||||
9 files changed, 107 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||
@@ -267,30 +267,42 @@ static void ath11k_ahb_clearbit32(struct
|
||||
static void ath11k_ahb_ce_irq_enable(struct ath11k_base *ab, u16 ce_id)
|
||||
{
|
||||
const struct ce_attr *ce_attr;
|
||||
+ const struct ce_ie_addr *ce_ie_addr = ab->hw_params.ce_ie_addr;
|
||||
+ u32 ie1_reg_addr, ie2_reg_addr, ie3_reg_addr;
|
||||
+
|
||||
+ ie1_reg_addr = ce_ie_addr->ie1_reg_addr + ATH11K_CE_OFFSET(ab);
|
||||
+ ie2_reg_addr = ce_ie_addr->ie2_reg_addr + ATH11K_CE_OFFSET(ab);
|
||||
+ ie3_reg_addr = ce_ie_addr->ie3_reg_addr + ATH11K_CE_OFFSET(ab);
|
||||
|
||||
ce_attr = &ab->hw_params.host_ce_config[ce_id];
|
||||
if (ce_attr->src_nentries)
|
||||
- ath11k_ahb_setbit32(ab, ce_id, CE_HOST_IE_ADDRESS);
|
||||
+ ath11k_ahb_setbit32(ab, ce_id, ie1_reg_addr);
|
||||
|
||||
if (ce_attr->dest_nentries) {
|
||||
- ath11k_ahb_setbit32(ab, ce_id, CE_HOST_IE_2_ADDRESS);
|
||||
+ ath11k_ahb_setbit32(ab, ce_id, ie2_reg_addr);
|
||||
ath11k_ahb_setbit32(ab, ce_id + CE_HOST_IE_3_SHIFT,
|
||||
- CE_HOST_IE_3_ADDRESS);
|
||||
+ ie3_reg_addr);
|
||||
}
|
||||
}
|
||||
|
||||
static void ath11k_ahb_ce_irq_disable(struct ath11k_base *ab, u16 ce_id)
|
||||
{
|
||||
const struct ce_attr *ce_attr;
|
||||
+ const struct ce_ie_addr *ce_ie_addr = ab->hw_params.ce_ie_addr;
|
||||
+ u32 ie1_reg_addr, ie2_reg_addr, ie3_reg_addr;
|
||||
+
|
||||
+ ie1_reg_addr = ce_ie_addr->ie1_reg_addr + ATH11K_CE_OFFSET(ab);
|
||||
+ ie2_reg_addr = ce_ie_addr->ie2_reg_addr + ATH11K_CE_OFFSET(ab);
|
||||
+ ie3_reg_addr = ce_ie_addr->ie3_reg_addr + ATH11K_CE_OFFSET(ab);
|
||||
|
||||
ce_attr = &ab->hw_params.host_ce_config[ce_id];
|
||||
if (ce_attr->src_nentries)
|
||||
- ath11k_ahb_clearbit32(ab, ce_id, CE_HOST_IE_ADDRESS);
|
||||
+ ath11k_ahb_clearbit32(ab, ce_id, ie1_reg_addr);
|
||||
|
||||
if (ce_attr->dest_nentries) {
|
||||
- ath11k_ahb_clearbit32(ab, ce_id, CE_HOST_IE_2_ADDRESS);
|
||||
+ ath11k_ahb_clearbit32(ab, ce_id, ie2_reg_addr);
|
||||
ath11k_ahb_clearbit32(ab, ce_id + CE_HOST_IE_3_SHIFT,
|
||||
- CE_HOST_IE_3_ADDRESS);
|
||||
+ ie3_reg_addr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1148,10 +1160,26 @@ static int ath11k_ahb_probe(struct platf
|
||||
goto err_core_free;
|
||||
}
|
||||
|
||||
+ ab->mem_ce = ab->mem;
|
||||
+
|
||||
ret = ath11k_core_pre_init(ab);
|
||||
if (ret)
|
||||
goto err_core_free;
|
||||
|
||||
+ if (ab->hw_params.ce_remap) {
|
||||
+ const struct ce_remap *ce_remap = ab->hw_params.ce_remap;
|
||||
+ /* ce register space is moved out of wcss unlike ipq8074 or ipq6018
|
||||
+ * and the space is not contiguous, hence remapping the CE registers
|
||||
+ * to a new space for accessing them.
|
||||
+ */
|
||||
+ ab->mem_ce = ioremap(ce_remap->base, ce_remap->size);
|
||||
+ if (IS_ERR(ab->mem_ce)) {
|
||||
+ dev_err(&pdev->dev, "ce ioremap error\n");
|
||||
+ ret = -ENOMEM;
|
||||
+ goto err_core_free;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
ret = ath11k_ahb_setup_resources(ab);
|
||||
if (ret)
|
||||
goto err_core_free;
|
||||
@@ -1242,6 +1270,10 @@ static void ath11k_ahb_free_resources(st
|
||||
ath11k_ahb_release_smp2p_handle(ab);
|
||||
ath11k_ahb_fw_resource_deinit(ab);
|
||||
ath11k_ce_free_pipes(ab);
|
||||
+
|
||||
+ if (ab->hw_params.ce_remap)
|
||||
+ iounmap(ab->mem_ce);
|
||||
+
|
||||
ath11k_core_free(ab);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
}
|
||||
--- a/drivers/net/wireless/ath/ath11k/ce.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/ce.h
|
||||
@@ -49,6 +49,11 @@ void ath11k_ce_byte_swap(void *mem, u32
|
||||
#define CE_HOST_IE_2_ADDRESS 0x00A18040
|
||||
#define CE_HOST_IE_3_ADDRESS CE_HOST_IE_ADDRESS
|
||||
|
||||
+/* CE IE registers are different for IPQ5018 */
|
||||
+#define CE_HOST_IPQ5018_IE_ADDRESS 0x0841804C
|
||||
+#define CE_HOST_IPQ5018_IE_2_ADDRESS 0x08418050
|
||||
+#define CE_HOST_IPQ5018_IE_3_ADDRESS CE_HOST_IPQ5018_IE_ADDRESS
|
||||
+
|
||||
#define CE_HOST_IE_3_SHIFT 0xC
|
||||
|
||||
#define CE_RING_IDX_INCR(nentries_mask, idx) (((idx) + 1) & (nentries_mask))
|
||||
@@ -84,6 +89,17 @@ struct ce_pipe_config {
|
||||
__le32 reserved;
|
||||
};
|
||||
|
||||
+struct ce_ie_addr {
|
||||
+ u32 ie1_reg_addr;
|
||||
+ u32 ie2_reg_addr;
|
||||
+ u32 ie3_reg_addr;
|
||||
+};
|
||||
+
|
||||
+struct ce_remap {
|
||||
+ u32 base;
|
||||
+ u32 size;
|
||||
+};
|
||||
+
|
||||
struct ce_attr {
|
||||
/* CE_ATTR_* values */
|
||||
unsigned int flags;
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -54,6 +54,7 @@ static const struct ath11k_hw_params ath
|
||||
.target_ce_count = 11,
|
||||
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_ipq8074,
|
||||
.svc_to_ce_map_len = 21,
|
||||
+ .ce_ie_addr = &ath11k_ce_ie_addr_ipq8074,
|
||||
.single_pdev_only = false,
|
||||
.rxdma1_enable = true,
|
||||
.num_rxmda_per_pdev = 1,
|
||||
@@ -137,6 +138,7 @@ static const struct ath11k_hw_params ath
|
||||
.target_ce_count = 11,
|
||||
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_ipq6018,
|
||||
.svc_to_ce_map_len = 19,
|
||||
+ .ce_ie_addr = &ath11k_ce_ie_addr_ipq8074,
|
||||
.single_pdev_only = false,
|
||||
.rxdma1_enable = true,
|
||||
.num_rxmda_per_pdev = 1,
|
||||
@@ -218,6 +220,7 @@ static const struct ath11k_hw_params ath
|
||||
.target_ce_count = 9,
|
||||
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qca6390,
|
||||
.svc_to_ce_map_len = 14,
|
||||
+ .ce_ie_addr = &ath11k_ce_ie_addr_ipq8074,
|
||||
.single_pdev_only = true,
|
||||
.rxdma1_enable = false,
|
||||
.num_rxmda_per_pdev = 2,
|
||||
@@ -301,6 +304,7 @@ static const struct ath11k_hw_params ath
|
||||
.target_ce_count = 9,
|
||||
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qcn9074,
|
||||
.svc_to_ce_map_len = 18,
|
||||
+ .ce_ie_addr = &ath11k_ce_ie_addr_ipq8074,
|
||||
.rxdma1_enable = true,
|
||||
.num_rxmda_per_pdev = 1,
|
||||
.rx_mac_buf_ring = false,
|
||||
@@ -381,6 +385,7 @@ static const struct ath11k_hw_params ath
|
||||
.target_ce_count = 9,
|
||||
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qca6390,
|
||||
.svc_to_ce_map_len = 14,
|
||||
+ .ce_ie_addr = &ath11k_ce_ie_addr_ipq8074,
|
||||
.single_pdev_only = true,
|
||||
.rxdma1_enable = false,
|
||||
.num_rxmda_per_pdev = 2,
|
||||
@@ -546,6 +551,7 @@ static const struct ath11k_hw_params ath
|
||||
.target_ce_count = 9,
|
||||
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qca6390,
|
||||
.svc_to_ce_map_len = 14,
|
||||
+ .ce_ie_addr = &ath11k_ce_ie_addr_ipq8074,
|
||||
.single_pdev_only = true,
|
||||
.rxdma1_enable = false,
|
||||
.num_rxmda_per_pdev = 1,
|
||||
@@ -634,6 +640,8 @@ static const struct ath11k_hw_params ath
|
||||
.target_ce_count = TARGET_CE_CNT_5018,
|
||||
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_ipq5018,
|
||||
.svc_to_ce_map_len = SVC_CE_MAP_LEN_5018,
|
||||
+ .ce_ie_addr = &ath11k_ce_ie_addr_ipq5018,
|
||||
+ .ce_remap = &ath11k_ce_remap_ipq5018,
|
||||
.rxdma1_enable = true,
|
||||
.num_rxmda_per_pdev = RXDMA_PER_PDEV_5018,
|
||||
.rx_mac_buf_ring = false,
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -851,6 +851,7 @@ struct ath11k_base {
|
||||
struct ath11k_dp dp;
|
||||
|
||||
void __iomem *mem;
|
||||
+ void __iomem *mem_ce;
|
||||
unsigned long mem_len;
|
||||
|
||||
struct {
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal.c
|
||||
@@ -1220,16 +1220,20 @@ static int ath11k_hal_srng_create_config
|
||||
s->reg_start[1] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_STATUS_RING_HP;
|
||||
|
||||
s = &hal->srng_config[HAL_CE_SRC];
|
||||
- s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab) + HAL_CE_DST_RING_BASE_LSB;
|
||||
- s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab) + HAL_CE_DST_RING_HP;
|
||||
+ s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab) + HAL_CE_DST_RING_BASE_LSB +
|
||||
+ ATH11K_CE_OFFSET(ab);
|
||||
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab) + HAL_CE_DST_RING_HP +
|
||||
+ ATH11K_CE_OFFSET(ab);
|
||||
s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_SRC_REG(ab) -
|
||||
HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab);
|
||||
s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_SRC_REG(ab) -
|
||||
HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab);
|
||||
|
||||
s = &hal->srng_config[HAL_CE_DST];
|
||||
- s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_RING_BASE_LSB;
|
||||
- s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_RING_HP;
|
||||
+ s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_RING_BASE_LSB +
|
||||
+ ATH11K_CE_OFFSET(ab);
|
||||
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_RING_HP +
|
||||
+ ATH11K_CE_OFFSET(ab);
|
||||
s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) -
|
||||
HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab);
|
||||
s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) -
|
||||
@@ -1237,8 +1241,9 @@ static int ath11k_hal_srng_create_config
|
||||
|
||||
s = &hal->srng_config[HAL_CE_DST_STATUS];
|
||||
s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) +
|
||||
- HAL_CE_DST_STATUS_RING_BASE_LSB;
|
||||
- s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_STATUS_RING_HP;
|
||||
+ HAL_CE_DST_STATUS_RING_BASE_LSB + ATH11K_CE_OFFSET(ab);
|
||||
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_STATUS_RING_HP +
|
||||
+ ATH11K_CE_OFFSET(ab);
|
||||
s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) -
|
||||
HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab);
|
||||
s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) -
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal.h
|
||||
@@ -321,6 +321,10 @@ struct ath11k_base;
|
||||
#define HAL_WBM2SW_RELEASE_RING_BASE_MSB_RING_SIZE 0x000fffff
|
||||
#define HAL_RXDMA_RING_MAX_SIZE 0x0000ffff
|
||||
|
||||
+/* IPQ5018 ce registers */
|
||||
+#define HAL_IPQ5018_CE_WFSS_REG_BASE 0x08400000
|
||||
+#define HAL_IPQ5018_CE_SIZE 0x200000
|
||||
+
|
||||
/* Add any other errors here and return them in
|
||||
* ath11k_hal_rx_desc_get_err().
|
||||
*/
|
||||
@@ -519,6 +523,7 @@ enum hal_srng_dir {
|
||||
#define HAL_SRNG_FLAGS_MSI_INTR 0x00020000
|
||||
#define HAL_SRNG_FLAGS_CACHED 0x20000000
|
||||
#define HAL_SRNG_FLAGS_LMAC_RING 0x80000000
|
||||
+#define HAL_SRNG_FLAGS_REMAP_CE_RING 0x10000000
|
||||
|
||||
#define HAL_SRNG_TLV_HDR_TAG GENMASK(9, 1)
|
||||
#define HAL_SRNG_TLV_HDR_LEN GENMASK(25, 10)
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.c
|
||||
@@ -2163,6 +2163,23 @@ const struct service_to_pipe ath11k_targ
|
||||
{ /* terminator entry */ }
|
||||
};
|
||||
|
||||
+const struct ce_ie_addr ath11k_ce_ie_addr_ipq8074 = {
|
||||
+ .ie1_reg_addr = CE_HOST_IE_ADDRESS,
|
||||
+ .ie2_reg_addr = CE_HOST_IE_2_ADDRESS,
|
||||
+ .ie3_reg_addr = CE_HOST_IE_3_ADDRESS,
|
||||
+};
|
||||
+
|
||||
+const struct ce_ie_addr ath11k_ce_ie_addr_ipq5018 = {
|
||||
+ .ie1_reg_addr = CE_HOST_IPQ5018_IE_ADDRESS - HAL_IPQ5018_CE_WFSS_REG_BASE,
|
||||
+ .ie2_reg_addr = CE_HOST_IPQ5018_IE_2_ADDRESS - HAL_IPQ5018_CE_WFSS_REG_BASE,
|
||||
+ .ie3_reg_addr = CE_HOST_IPQ5018_IE_3_ADDRESS - HAL_IPQ5018_CE_WFSS_REG_BASE,
|
||||
+};
|
||||
+
|
||||
+const struct ce_remap ath11k_ce_remap_ipq5018 = {
|
||||
+ .base = HAL_IPQ5018_CE_WFSS_REG_BASE,
|
||||
+ .size = HAL_IPQ5018_CE_SIZE,
|
||||
+};
|
||||
+
|
||||
const struct ath11k_hw_regs ipq8074_regs = {
|
||||
/* SW2TCL(x) R0 ring configuration address */
|
||||
.hal_tcl1_ring_base_lsb = 0x00000510,
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
||||
@@ -80,6 +80,8 @@
|
||||
#define ATH11K_M3_FILE "m3.bin"
|
||||
#define ATH11K_REGDB_FILE_NAME "regdb.bin"
|
||||
|
||||
+#define ATH11K_CE_OFFSET(ab) (ab->mem_ce - ab->mem)
|
||||
+
|
||||
enum ath11k_hw_rate_cck {
|
||||
ATH11K_HW_RATE_CCK_LP_11M = 0,
|
||||
ATH11K_HW_RATE_CCK_LP_5_5M,
|
||||
@@ -158,6 +160,8 @@ struct ath11k_hw_params {
|
||||
u32 target_ce_count;
|
||||
const struct service_to_pipe *svc_to_ce_map;
|
||||
u32 svc_to_ce_map_len;
|
||||
+ const struct ce_ie_addr *ce_ie_addr;
|
||||
+ const struct ce_remap *ce_remap;
|
||||
|
||||
bool single_pdev_only;
|
||||
|
||||
@@ -277,6 +281,11 @@ extern const struct ath11k_hw_ring_mask
|
||||
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn9074;
|
||||
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_wcn6750;
|
||||
|
||||
+extern const struct ce_ie_addr ath11k_ce_ie_addr_ipq8074;
|
||||
+extern const struct ce_ie_addr ath11k_ce_ie_addr_ipq5018;
|
||||
+
|
||||
+extern const struct ce_remap ath11k_ce_remap_ipq5018;
|
||||
+
|
||||
extern const struct ath11k_hw_hal_params ath11k_hw_hal_params_ipq8074;
|
||||
extern const struct ath11k_hw_hal_params ath11k_hw_hal_params_qca6390;
|
||||
extern const struct ath11k_hw_hal_params ath11k_hw_hal_params_wcn6750;
|
||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||
@@ -547,6 +547,8 @@ static int ath11k_pci_claim(struct ath11
|
||||
goto clear_master;
|
||||
}
|
||||
|
||||
+ ab->mem_ce = ab->mem;
|
||||
+
|
||||
ath11k_dbg(ab, ATH11K_DBG_BOOT, "boot pci_mem 0x%pK\n", ab->mem);
|
||||
return 0;
|
||||
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
From 458f66c30df2b8495790cf6fca76ebad44046921 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Date: Thu, 21 Sep 2023 11:16:57 +0300
|
||||
Subject: [PATCH] wifi: ath11k: use kstrtoul_from_user() where appropriate
|
||||
|
||||
Use 'kstrtoul_from_user()' in 'ath11k_write_file_spectral_count()'
|
||||
and 'ath11k_write_file_spectral_bins()'
|
||||
|
||||
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230824075121.121144-4-dmantipov@yandex.ru
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/spectral.c | 26 +++++++---------------
|
||||
1 file changed, 8 insertions(+), 18 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/spectral.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/spectral.c
|
||||
@@ -386,16 +386,11 @@ static ssize_t ath11k_write_file_spectra
|
||||
{
|
||||
struct ath11k *ar = file->private_data;
|
||||
unsigned long val;
|
||||
- char buf[32];
|
||||
- ssize_t len;
|
||||
-
|
||||
- len = min(count, sizeof(buf) - 1);
|
||||
- if (copy_from_user(buf, user_buf, len))
|
||||
- return -EFAULT;
|
||||
+ ssize_t ret;
|
||||
|
||||
- buf[len] = '\0';
|
||||
- if (kstrtoul(buf, 0, &val))
|
||||
- return -EINVAL;
|
||||
+ ret = kstrtoul_from_user(user_buf, count, 0, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
|
||||
if (val > ATH11K_SPECTRAL_SCAN_COUNT_MAX)
|
||||
return -EINVAL;
|
||||
@@ -441,16 +436,11 @@ static ssize_t ath11k_write_file_spectra
|
||||
{
|
||||
struct ath11k *ar = file->private_data;
|
||||
unsigned long val;
|
||||
- char buf[32];
|
||||
- ssize_t len;
|
||||
-
|
||||
- len = min(count, sizeof(buf) - 1);
|
||||
- if (copy_from_user(buf, user_buf, len))
|
||||
- return -EFAULT;
|
||||
+ ssize_t ret;
|
||||
|
||||
- buf[len] = '\0';
|
||||
- if (kstrtoul(buf, 0, &val))
|
||||
- return -EINVAL;
|
||||
+ ret = kstrtoul_from_user(user_buf, count, 0, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
|
||||
if (val < ATH11K_SPECTRAL_MIN_BINS ||
|
||||
val > ar->ab->hw_params.spectral.max_fft_bins)
|
||||
+248
@@ -0,0 +1,248 @@
|
||||
From 87fd0602610d6965c45afc61780ac98842e8f902 Mon Sep 17 00:00:00 2001
|
||||
From: Wu Yunchuan <yunchuan@nfschina.com>
|
||||
Date: Thu, 21 Sep 2023 11:50:05 +0300
|
||||
Subject: [PATCH] wifi: ath11k: remove unnecessary (void*) conversions
|
||||
|
||||
No need cast (void *) to (struct ath11k_base *),
|
||||
struct hal_rx_msdu_link *), (struct ath11k_buffer_addr *) or
|
||||
other types.
|
||||
|
||||
Signed-off-by: Wu Yunchuan <yunchuan@nfschina.com>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230919045150.524304-1-yunchuan@nfschina.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/dp.c | 2 +-
|
||||
drivers/net/wireless/ath/ath11k/dp_rx.c | 13 +++++--------
|
||||
drivers/net/wireless/ath/ath11k/hal.c | 8 +++-----
|
||||
drivers/net/wireless/ath/ath11k/hal_rx.c | 17 +++++++----------
|
||||
drivers/net/wireless/ath/ath11k/hal_tx.c | 2 +-
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 4 ++--
|
||||
drivers/net/wireless/ath/ath11k/spectral.c | 2 +-
|
||||
drivers/net/wireless/ath/ath11k/wmi.c | 6 +++---
|
||||
8 files changed, 23 insertions(+), 31 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/dp.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp.c
|
||||
@@ -1009,7 +1009,7 @@ void ath11k_dp_vdev_tx_attach(struct ath
|
||||
|
||||
static int ath11k_dp_tx_pending_cleanup(int buf_id, void *skb, void *ctx)
|
||||
{
|
||||
- struct ath11k_base *ab = (struct ath11k_base *)ctx;
|
||||
+ struct ath11k_base *ab = ctx;
|
||||
struct sk_buff *msdu = skb;
|
||||
|
||||
dma_unmap_single(ab->dev, ATH11K_SKB_CB(msdu)->paddr, msdu->len,
|
||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
@@ -1256,7 +1256,7 @@ static int ath11k_htt_tlv_ppdu_stats_par
|
||||
int cur_user;
|
||||
u16 peer_id;
|
||||
|
||||
- ppdu_info = (struct htt_ppdu_stats_info *)data;
|
||||
+ ppdu_info = data;
|
||||
|
||||
switch (tag) {
|
||||
case HTT_PPDU_STATS_TAG_COMMON:
|
||||
@@ -4492,8 +4492,7 @@ int ath11k_dp_rx_monitor_link_desc_retur
|
||||
src_srng_desc = ath11k_hal_srng_src_get_next_entry(ar->ab, hal_srng);
|
||||
|
||||
if (src_srng_desc) {
|
||||
- struct ath11k_buffer_addr *src_desc =
|
||||
- (struct ath11k_buffer_addr *)src_srng_desc;
|
||||
+ struct ath11k_buffer_addr *src_desc = src_srng_desc;
|
||||
|
||||
*src_desc = *((struct ath11k_buffer_addr *)p_last_buf_addr_info);
|
||||
} else {
|
||||
@@ -4512,8 +4511,7 @@ void ath11k_dp_rx_mon_next_link_desc_get
|
||||
u8 *rbm,
|
||||
void **pp_buf_addr_info)
|
||||
{
|
||||
- struct hal_rx_msdu_link *msdu_link =
|
||||
- (struct hal_rx_msdu_link *)rx_msdu_link_desc;
|
||||
+ struct hal_rx_msdu_link *msdu_link = rx_msdu_link_desc;
|
||||
struct ath11k_buffer_addr *buf_addr_info;
|
||||
|
||||
buf_addr_info = (struct ath11k_buffer_addr *)&msdu_link->buf_addr_info;
|
||||
@@ -4554,7 +4552,7 @@ static void ath11k_hal_rx_msdu_list_get(
|
||||
u32 first = FIELD_PREP(RX_MSDU_DESC_INFO0_FIRST_MSDU_IN_MPDU, 1);
|
||||
u8 tmp = 0;
|
||||
|
||||
- msdu_link = (struct hal_rx_msdu_link *)msdu_link_desc;
|
||||
+ msdu_link = msdu_link_desc;
|
||||
msdu_details = &msdu_link->msdu_link[0];
|
||||
|
||||
for (i = 0; i < HAL_RX_NUM_MSDU_DESC; i++) {
|
||||
@@ -4651,8 +4649,7 @@ ath11k_dp_rx_mon_mpdu_pop(struct ath11k
|
||||
bool is_frag, is_first_msdu;
|
||||
bool drop_mpdu = false;
|
||||
struct ath11k_skb_rxcb *rxcb;
|
||||
- struct hal_reo_entrance_ring *ent_desc =
|
||||
- (struct hal_reo_entrance_ring *)ring_entry;
|
||||
+ struct hal_reo_entrance_ring *ent_desc = ring_entry;
|
||||
int buf_id;
|
||||
u32 rx_link_buf_info[2];
|
||||
u8 rbm;
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal.c
|
||||
@@ -571,7 +571,7 @@ u32 ath11k_hal_ce_get_desc_size(enum hal
|
||||
void ath11k_hal_ce_src_set_desc(void *buf, dma_addr_t paddr, u32 len, u32 id,
|
||||
u8 byte_swap_data)
|
||||
{
|
||||
- struct hal_ce_srng_src_desc *desc = (struct hal_ce_srng_src_desc *)buf;
|
||||
+ struct hal_ce_srng_src_desc *desc = buf;
|
||||
|
||||
desc->buffer_addr_low = paddr & HAL_ADDR_LSB_REG_MASK;
|
||||
desc->buffer_addr_info =
|
||||
@@ -586,8 +586,7 @@ void ath11k_hal_ce_src_set_desc(void *bu
|
||||
|
||||
void ath11k_hal_ce_dst_set_desc(void *buf, dma_addr_t paddr)
|
||||
{
|
||||
- struct hal_ce_srng_dest_desc *desc =
|
||||
- (struct hal_ce_srng_dest_desc *)buf;
|
||||
+ struct hal_ce_srng_dest_desc *desc = buf;
|
||||
|
||||
desc->buffer_addr_low = paddr & HAL_ADDR_LSB_REG_MASK;
|
||||
desc->buffer_addr_info =
|
||||
@@ -597,8 +596,7 @@ void ath11k_hal_ce_dst_set_desc(void *bu
|
||||
|
||||
u32 ath11k_hal_ce_dst_status_get_length(void *buf)
|
||||
{
|
||||
- struct hal_ce_srng_dst_status_desc *desc =
|
||||
- (struct hal_ce_srng_dst_status_desc *)buf;
|
||||
+ struct hal_ce_srng_dst_status_desc *desc = buf;
|
||||
u32 len;
|
||||
|
||||
len = FIELD_GET(HAL_CE_DST_STATUS_DESC_FLAGS_LEN, desc->flags);
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
@@ -265,7 +265,7 @@ out:
|
||||
void ath11k_hal_rx_buf_addr_info_set(void *desc, dma_addr_t paddr,
|
||||
u32 cookie, u8 manager)
|
||||
{
|
||||
- struct ath11k_buffer_addr *binfo = (struct ath11k_buffer_addr *)desc;
|
||||
+ struct ath11k_buffer_addr *binfo = desc;
|
||||
u32 paddr_lo, paddr_hi;
|
||||
|
||||
paddr_lo = lower_32_bits(paddr);
|
||||
@@ -279,7 +279,7 @@ void ath11k_hal_rx_buf_addr_info_set(voi
|
||||
void ath11k_hal_rx_buf_addr_info_get(void *desc, dma_addr_t *paddr,
|
||||
u32 *cookie, u8 *rbm)
|
||||
{
|
||||
- struct ath11k_buffer_addr *binfo = (struct ath11k_buffer_addr *)desc;
|
||||
+ struct ath11k_buffer_addr *binfo = desc;
|
||||
|
||||
*paddr =
|
||||
(((u64)FIELD_GET(BUFFER_ADDR_INFO1_ADDR, binfo->info1)) << 32) |
|
||||
@@ -292,7 +292,7 @@ void ath11k_hal_rx_msdu_link_info_get(vo
|
||||
u32 *msdu_cookies,
|
||||
enum hal_rx_buf_return_buf_manager *rbm)
|
||||
{
|
||||
- struct hal_rx_msdu_link *link = (struct hal_rx_msdu_link *)link_desc;
|
||||
+ struct hal_rx_msdu_link *link = link_desc;
|
||||
struct hal_rx_msdu_details *msdu;
|
||||
int i;
|
||||
|
||||
@@ -699,7 +699,7 @@ u32 ath11k_hal_reo_qdesc_size(u32 ba_win
|
||||
void ath11k_hal_reo_qdesc_setup(void *vaddr, int tid, u32 ba_window_size,
|
||||
u32 start_seq, enum hal_pn_type type)
|
||||
{
|
||||
- struct hal_rx_reo_queue *qdesc = (struct hal_rx_reo_queue *)vaddr;
|
||||
+ struct hal_rx_reo_queue *qdesc = vaddr;
|
||||
struct hal_rx_reo_queue_ext *ext_desc;
|
||||
|
||||
memset(qdesc, 0, sizeof(*qdesc));
|
||||
@@ -809,8 +809,7 @@ static inline void
|
||||
ath11k_hal_rx_handle_ofdma_info(void *rx_tlv,
|
||||
struct hal_rx_user_status *rx_user_status)
|
||||
{
|
||||
- struct hal_rx_ppdu_end_user_stats *ppdu_end_user =
|
||||
- (struct hal_rx_ppdu_end_user_stats *)rx_tlv;
|
||||
+ struct hal_rx_ppdu_end_user_stats *ppdu_end_user = rx_tlv;
|
||||
|
||||
rx_user_status->ul_ofdma_user_v0_word0 = __le32_to_cpu(ppdu_end_user->info6);
|
||||
|
||||
@@ -821,8 +820,7 @@ static inline void
|
||||
ath11k_hal_rx_populate_byte_count(void *rx_tlv, void *ppduinfo,
|
||||
struct hal_rx_user_status *rx_user_status)
|
||||
{
|
||||
- struct hal_rx_ppdu_end_user_stats *ppdu_end_user =
|
||||
- (struct hal_rx_ppdu_end_user_stats *)rx_tlv;
|
||||
+ struct hal_rx_ppdu_end_user_stats *ppdu_end_user = rx_tlv;
|
||||
|
||||
rx_user_status->mpdu_ok_byte_count =
|
||||
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT,
|
||||
@@ -1540,8 +1538,7 @@ void ath11k_hal_rx_reo_ent_buf_paddr_get
|
||||
u32 *sw_cookie, void **pp_buf_addr,
|
||||
u8 *rbm, u32 *msdu_cnt)
|
||||
{
|
||||
- struct hal_reo_entrance_ring *reo_ent_ring =
|
||||
- (struct hal_reo_entrance_ring *)rx_desc;
|
||||
+ struct hal_reo_entrance_ring *reo_ent_ring = rx_desc;
|
||||
struct ath11k_buffer_addr *buf_addr_info;
|
||||
struct rx_mpdu_desc *rx_mpdu_desc_info_details;
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal_tx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal_tx.c
|
||||
@@ -37,7 +37,7 @@ static const u8 dscp_tid_map[DSCP_TID_MA
|
||||
void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd,
|
||||
struct hal_tx_info *ti)
|
||||
{
|
||||
- struct hal_tcl_data_cmd *tcl_cmd = (struct hal_tcl_data_cmd *)cmd;
|
||||
+ struct hal_tcl_data_cmd *tcl_cmd = cmd;
|
||||
|
||||
tcl_cmd->buf_addr_info.info0 =
|
||||
FIELD_PREP(BUFFER_ADDR_INFO0_ADDR, ti->paddr);
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -6970,8 +6970,8 @@ err:
|
||||
|
||||
static int ath11k_mac_vif_unref(int buf_id, void *skb, void *ctx)
|
||||
{
|
||||
- struct ieee80211_vif *vif = (struct ieee80211_vif *)ctx;
|
||||
- struct ath11k_skb_cb *skb_cb = ATH11K_SKB_CB((struct sk_buff *)skb);
|
||||
+ struct ieee80211_vif *vif = ctx;
|
||||
+ struct ath11k_skb_cb *skb_cb = ATH11K_SKB_CB(skb);
|
||||
|
||||
if (skb_cb->vif == vif)
|
||||
skb_cb->vif = NULL;
|
||||
--- a/drivers/net/wireless/ath/ath11k/spectral.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/spectral.c
|
||||
@@ -592,7 +592,7 @@ int ath11k_spectral_process_fft(struct a
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- tlv = (struct spectral_tlv *)data;
|
||||
+ tlv = data;
|
||||
tlv_len = FIELD_GET(SPECTRAL_TLV_HDR_LEN, __le32_to_cpu(tlv->header));
|
||||
/* convert Dword into bytes */
|
||||
tlv_len *= ATH11K_SPECTRAL_DWORD_SIZE;
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -2281,7 +2281,7 @@ int ath11k_wmi_send_scan_start_cmd(struc
|
||||
tlv->header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_ARRAY_UINT32) |
|
||||
FIELD_PREP(WMI_TLV_LEN, len);
|
||||
ptr += TLV_HDR_SIZE;
|
||||
- tmp_ptr = (u32 *)ptr;
|
||||
+ tmp_ptr = ptr;
|
||||
|
||||
for (i = 0; i < params->num_chan; ++i)
|
||||
tmp_ptr[i] = params->chan_list[i];
|
||||
@@ -4148,7 +4148,7 @@ static int ath11k_init_cmd_send(struct a
|
||||
ptr += TLV_HDR_SIZE + len;
|
||||
|
||||
if (param->hw_mode_id != WMI_HOST_HW_MODE_MAX) {
|
||||
- hw_mode = (struct wmi_pdev_set_hw_mode_cmd_param *)ptr;
|
||||
+ hw_mode = ptr;
|
||||
hw_mode->tlv_header = FIELD_PREP(WMI_TLV_TAG,
|
||||
WMI_TAG_PDEV_SET_HW_MODE_CMD) |
|
||||
FIELD_PREP(WMI_TLV_LEN,
|
||||
@@ -4168,7 +4168,7 @@ static int ath11k_init_cmd_send(struct a
|
||||
len = sizeof(*band_to_mac);
|
||||
|
||||
for (idx = 0; idx < param->num_band_to_mac; idx++) {
|
||||
- band_to_mac = (void *)ptr;
|
||||
+ band_to_mac = ptr;
|
||||
|
||||
band_to_mac->tlv_header = FIELD_PREP(WMI_TLV_TAG,
|
||||
WMI_TAG_PDEV_BAND_TO_MAC) |
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
From 4fd15bb705d3faa7e6adab2daba2e3af80d9b6bd Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Date: Tue, 26 Sep 2023 07:29:04 +0300
|
||||
Subject: [PATCH] wifi: ath11k: fix ath11k_mac_op_remain_on_channel() stack
|
||||
usage
|
||||
|
||||
When compiling with clang 16.0.6, I've noticed the following:
|
||||
|
||||
drivers/net/wireless/ath/ath11k/mac.c:8903:12: warning: stack frame
|
||||
size (1032) exceeds limit (1024) in 'ath11k_mac_op_remain_on_channel'
|
||||
[-Wframe-larger-than]
|
||||
static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
|
||||
^
|
||||
68/1032 (6.59%) spills, 964/1032 (93.41%) variables
|
||||
|
||||
So switch to kzalloc()'ed instance of 'struct scan_req_params' like
|
||||
it's done in 'ath11k_mac_op_hw_scan()'. Compile tested only.
|
||||
|
||||
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230926042906.13725-1-dmantipov@yandex.ru
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 44 +++++++++++++++------------
|
||||
1 file changed, 25 insertions(+), 19 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -8908,7 +8908,7 @@ static int ath11k_mac_op_remain_on_chann
|
||||
{
|
||||
struct ath11k *ar = hw->priv;
|
||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||
- struct scan_req_params arg;
|
||||
+ struct scan_req_params *arg;
|
||||
int ret;
|
||||
u32 scan_time_msec;
|
||||
|
||||
@@ -8940,27 +8940,31 @@ static int ath11k_mac_op_remain_on_chann
|
||||
|
||||
scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
|
||||
|
||||
- memset(&arg, 0, sizeof(arg));
|
||||
- ath11k_wmi_start_scan_init(ar, &arg);
|
||||
- arg.num_chan = 1;
|
||||
- arg.chan_list = kcalloc(arg.num_chan, sizeof(*arg.chan_list),
|
||||
- GFP_KERNEL);
|
||||
- if (!arg.chan_list) {
|
||||
+ arg = kzalloc(sizeof(*arg), GFP_KERNEL);
|
||||
+ if (!arg) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
+ ath11k_wmi_start_scan_init(ar, arg);
|
||||
+ arg->num_chan = 1;
|
||||
+ arg->chan_list = kcalloc(arg->num_chan, sizeof(*arg->chan_list),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!arg->chan_list) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto free_arg;
|
||||
+ }
|
||||
|
||||
- arg.vdev_id = arvif->vdev_id;
|
||||
- arg.scan_id = ATH11K_SCAN_ID;
|
||||
- arg.chan_list[0] = chan->center_freq;
|
||||
- arg.dwell_time_active = scan_time_msec;
|
||||
- arg.dwell_time_passive = scan_time_msec;
|
||||
- arg.max_scan_time = scan_time_msec;
|
||||
- arg.scan_flags |= WMI_SCAN_FLAG_PASSIVE;
|
||||
- arg.scan_flags |= WMI_SCAN_FILTER_PROBE_REQ;
|
||||
- arg.burst_duration = duration;
|
||||
+ arg->vdev_id = arvif->vdev_id;
|
||||
+ arg->scan_id = ATH11K_SCAN_ID;
|
||||
+ arg->chan_list[0] = chan->center_freq;
|
||||
+ arg->dwell_time_active = scan_time_msec;
|
||||
+ arg->dwell_time_passive = scan_time_msec;
|
||||
+ arg->max_scan_time = scan_time_msec;
|
||||
+ arg->scan_flags |= WMI_SCAN_FLAG_PASSIVE;
|
||||
+ arg->scan_flags |= WMI_SCAN_FILTER_PROBE_REQ;
|
||||
+ arg->burst_duration = duration;
|
||||
|
||||
- ret = ath11k_start_scan(ar, &arg);
|
||||
+ ret = ath11k_start_scan(ar, arg);
|
||||
if (ret) {
|
||||
ath11k_warn(ar->ab, "failed to start roc scan: %d\n", ret);
|
||||
|
||||
@@ -8986,7 +8990,9 @@ static int ath11k_mac_op_remain_on_chann
|
||||
ret = 0;
|
||||
|
||||
free_chan_list:
|
||||
- kfree(arg.chan_list);
|
||||
+ kfree(arg->chan_list);
|
||||
+free_arg:
|
||||
+ kfree(arg);
|
||||
exit:
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
return ret;
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
From ba60f2793d3a37a00da14bb56a26558a902d2831 Mon Sep 17 00:00:00 2001
|
||||
From: Sriram R <quic_srirrama@quicinc.com>
|
||||
Date: Fri, 2 Dec 2022 23:37:14 +0200
|
||||
Subject: [PATCH] wifi: ath11k: initialize hw_ops for IPQ5018
|
||||
|
||||
The ipq5018_ops is initialized for IPQ5018. This is different from
|
||||
other platforms.
|
||||
|
||||
Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
|
||||
Co-developed-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221122132152.17771-7-quic_kathirve@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 1 +
|
||||
drivers/net/wireless/ath/ath11k/hw.c | 40 ++++++++++++++++++++++++++
|
||||
drivers/net/wireless/ath/ath11k/hw.h | 1 +
|
||||
3 files changed, 42 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -635,6 +635,7 @@ static const struct ath11k_hw_params ath
|
||||
},
|
||||
.internal_sleep_clock = false,
|
||||
.regs = &ipq5018_regs,
|
||||
+ .hw_ops = &ipq5018_ops,
|
||||
.host_ce_config = ath11k_host_ce_config_qcn9074,
|
||||
.ce_count = CE_CNT_5018,
|
||||
.target_ce_config = ath11k_target_ce_config_wlan_ipq5018,
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.c
|
||||
@@ -1084,6 +1084,46 @@ const struct ath11k_hw_ops wcn6750_ops =
|
||||
.get_ring_selector = ath11k_hw_wcn6750_get_tcl_ring_selector,
|
||||
};
|
||||
|
||||
+/* IPQ5018 hw ops is similar to QCN9074 except for the dest ring remap */
|
||||
+const struct ath11k_hw_ops ipq5018_ops = {
|
||||
+ .get_hw_mac_from_pdev_id = ath11k_hw_ipq6018_mac_from_pdev_id,
|
||||
+ .wmi_init_config = ath11k_init_wmi_config_ipq8074,
|
||||
+ .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_ipq8074,
|
||||
+ .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_ipq8074,
|
||||
+ .tx_mesh_enable = ath11k_hw_qcn9074_tx_mesh_enable,
|
||||
+ .rx_desc_get_first_msdu = ath11k_hw_qcn9074_rx_desc_get_first_msdu,
|
||||
+ .rx_desc_get_last_msdu = ath11k_hw_qcn9074_rx_desc_get_last_msdu,
|
||||
+ .rx_desc_get_l3_pad_bytes = ath11k_hw_qcn9074_rx_desc_get_l3_pad_bytes,
|
||||
+ .rx_desc_get_hdr_status = ath11k_hw_qcn9074_rx_desc_get_hdr_status,
|
||||
+ .rx_desc_encrypt_valid = ath11k_hw_qcn9074_rx_desc_encrypt_valid,
|
||||
+ .rx_desc_get_encrypt_type = ath11k_hw_qcn9074_rx_desc_get_encrypt_type,
|
||||
+ .rx_desc_get_decap_type = ath11k_hw_qcn9074_rx_desc_get_decap_type,
|
||||
+ .rx_desc_get_mesh_ctl = ath11k_hw_qcn9074_rx_desc_get_mesh_ctl,
|
||||
+ .rx_desc_get_ldpc_support = ath11k_hw_qcn9074_rx_desc_get_ldpc_support,
|
||||
+ .rx_desc_get_mpdu_seq_ctl_vld = ath11k_hw_qcn9074_rx_desc_get_mpdu_seq_ctl_vld,
|
||||
+ .rx_desc_get_mpdu_fc_valid = ath11k_hw_qcn9074_rx_desc_get_mpdu_fc_valid,
|
||||
+ .rx_desc_get_mpdu_start_seq_no = ath11k_hw_qcn9074_rx_desc_get_mpdu_start_seq_no,
|
||||
+ .rx_desc_get_msdu_len = ath11k_hw_qcn9074_rx_desc_get_msdu_len,
|
||||
+ .rx_desc_get_msdu_sgi = ath11k_hw_qcn9074_rx_desc_get_msdu_sgi,
|
||||
+ .rx_desc_get_msdu_rate_mcs = ath11k_hw_qcn9074_rx_desc_get_msdu_rate_mcs,
|
||||
+ .rx_desc_get_msdu_rx_bw = ath11k_hw_qcn9074_rx_desc_get_msdu_rx_bw,
|
||||
+ .rx_desc_get_msdu_freq = ath11k_hw_qcn9074_rx_desc_get_msdu_freq,
|
||||
+ .rx_desc_get_msdu_pkt_type = ath11k_hw_qcn9074_rx_desc_get_msdu_pkt_type,
|
||||
+ .rx_desc_get_msdu_nss = ath11k_hw_qcn9074_rx_desc_get_msdu_nss,
|
||||
+ .rx_desc_get_mpdu_tid = ath11k_hw_qcn9074_rx_desc_get_mpdu_tid,
|
||||
+ .rx_desc_get_mpdu_peer_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_peer_id,
|
||||
+ .rx_desc_copy_attn_end_tlv = ath11k_hw_qcn9074_rx_desc_copy_attn_end,
|
||||
+ .rx_desc_get_mpdu_start_tag = ath11k_hw_qcn9074_rx_desc_get_mpdu_start_tag,
|
||||
+ .rx_desc_get_mpdu_ppdu_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_ppdu_id,
|
||||
+ .rx_desc_set_msdu_len = ath11k_hw_qcn9074_rx_desc_set_msdu_len,
|
||||
+ .rx_desc_get_attention = ath11k_hw_qcn9074_rx_desc_get_attention,
|
||||
+ .rx_desc_get_msdu_payload = ath11k_hw_qcn9074_rx_desc_get_msdu_payload,
|
||||
+ .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
|
||||
+ .rx_desc_mac_addr2_valid = ath11k_hw_ipq9074_rx_desc_mac_addr2_valid,
|
||||
+ .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq9074_rx_desc_mpdu_start_addr2,
|
||||
+
|
||||
+};
|
||||
+
|
||||
#define ATH11K_TX_RING_MASK_0 BIT(0)
|
||||
#define ATH11K_TX_RING_MASK_1 BIT(1)
|
||||
#define ATH11K_TX_RING_MASK_2 BIT(2)
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
||||
@@ -275,6 +275,7 @@ extern const struct ath11k_hw_ops qca639
|
||||
extern const struct ath11k_hw_ops qcn9074_ops;
|
||||
extern const struct ath11k_hw_ops wcn6855_ops;
|
||||
extern const struct ath11k_hw_ops wcn6750_ops;
|
||||
+extern const struct ath11k_hw_ops ipq5018_ops;
|
||||
|
||||
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_ipq8074;
|
||||
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390;
|
||||
-84
@@ -1,84 +0,0 @@
|
||||
From 69968f88f1770d61cae0febef805fd00d66cf6a1 Mon Sep 17 00:00:00 2001
|
||||
From: Sriram R <quic_srirrama@quicinc.com>
|
||||
Date: Fri, 2 Dec 2022 23:37:15 +0200
|
||||
Subject: [PATCH] wifi: ath11k: add new hw ops for IPQ5018 to get rx dest ring
|
||||
hashmap
|
||||
|
||||
The Destination ring control register is different
|
||||
for IPQ5018 when compared to IPQ8074/IPQ6018/QCN9074.
|
||||
Hence create a new hw ops to fetch the hash ring map
|
||||
for different device variants. ipq5018 hw ops
|
||||
is similar to qcn9074 except for this change, so reuse
|
||||
all the qcn9074 ops for ipq5018.
|
||||
|
||||
Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
|
||||
Co-developed-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221122132152.17771-8-quic_kathirve@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/hw.c | 44 ++++++++++++++++++++++++++++
|
||||
1 file changed, 44 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.c
|
||||
@@ -791,6 +791,49 @@ static void ath11k_hw_wcn6855_reo_setup(
|
||||
ring_hash_map);
|
||||
}
|
||||
|
||||
+static void ath11k_hw_ipq5018_reo_setup(struct ath11k_base *ab)
|
||||
+{
|
||||
+ u32 reo_base = HAL_SEQ_WCSS_UMAC_REO_REG;
|
||||
+ u32 val;
|
||||
+
|
||||
+ /* Each hash entry uses three bits to map to a particular ring. */
|
||||
+ u32 ring_hash_map = HAL_HASH_ROUTING_RING_SW1 << 0 |
|
||||
+ HAL_HASH_ROUTING_RING_SW2 << 4 |
|
||||
+ HAL_HASH_ROUTING_RING_SW3 << 8 |
|
||||
+ HAL_HASH_ROUTING_RING_SW4 << 12 |
|
||||
+ HAL_HASH_ROUTING_RING_SW1 << 16 |
|
||||
+ HAL_HASH_ROUTING_RING_SW2 << 20 |
|
||||
+ HAL_HASH_ROUTING_RING_SW3 << 24 |
|
||||
+ HAL_HASH_ROUTING_RING_SW4 << 28;
|
||||
+
|
||||
+ val = ath11k_hif_read32(ab, reo_base + HAL_REO1_GEN_ENABLE);
|
||||
+
|
||||
+ val &= ~HAL_REO1_GEN_ENABLE_FRAG_DST_RING;
|
||||
+ val |= FIELD_PREP(HAL_REO1_GEN_ENABLE_FRAG_DST_RING,
|
||||
+ HAL_SRNG_RING_ID_REO2SW1) |
|
||||
+ FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_LIST_ENABLE, 1) |
|
||||
+ FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_FLUSH_ENABLE, 1);
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_GEN_ENABLE, val);
|
||||
+
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_0(ab),
|
||||
+ HAL_DEFAULT_REO_TIMEOUT_USEC);
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_1(ab),
|
||||
+ HAL_DEFAULT_REO_TIMEOUT_USEC);
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_2(ab),
|
||||
+ HAL_DEFAULT_REO_TIMEOUT_USEC);
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_3(ab),
|
||||
+ HAL_DEFAULT_REO_TIMEOUT_USEC);
|
||||
+
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_0,
|
||||
+ ring_hash_map);
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_1,
|
||||
+ ring_hash_map);
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_2,
|
||||
+ ring_hash_map);
|
||||
+ ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_3,
|
||||
+ ring_hash_map);
|
||||
+}
|
||||
+
|
||||
static u16 ath11k_hw_ipq8074_mpdu_info_get_peerid(u8 *tlv_data)
|
||||
{
|
||||
u16 peer_id = 0;
|
||||
@@ -1117,6 +1160,7 @@ const struct ath11k_hw_ops ipq5018_ops =
|
||||
.rx_desc_get_mpdu_ppdu_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_ppdu_id,
|
||||
.rx_desc_set_msdu_len = ath11k_hw_qcn9074_rx_desc_set_msdu_len,
|
||||
.rx_desc_get_attention = ath11k_hw_qcn9074_rx_desc_get_attention,
|
||||
+ .reo_setup = ath11k_hw_ipq5018_reo_setup,
|
||||
.rx_desc_get_msdu_payload = ath11k_hw_qcn9074_rx_desc_get_msdu_payload,
|
||||
.mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
|
||||
.rx_desc_mac_addr2_valid = ath11k_hw_ipq9074_rx_desc_mac_addr2_valid,
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
From 9e61589ac3c2d23c528d3ffd44604d98553ea1cb Mon Sep 17 00:00:00 2001
|
||||
From: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Date: Wed, 27 Sep 2023 17:27:08 +0300
|
||||
Subject: [PATCH] wifi: ath11k: mac: fix struct ieee80211_sband_iftype_data
|
||||
handling
|
||||
|
||||
Commit e8c1841278a7 ("wifi: cfg80211: annotate iftype_data pointer with
|
||||
sparse") added sparse checks for struct ieee80211_sband_iftype_data handling
|
||||
which immediately found an issue in ath11k:
|
||||
|
||||
drivers/net/wireless/ath/ath11k/mac.c:7952:22: warning: incorrect type in argument 1 (different address spaces)
|
||||
drivers/net/wireless/ath/ath11k/mac.c:7952:22: expected struct ieee80211_sta_he_cap const *he_cap
|
||||
drivers/net/wireless/ath/ath11k/mac.c:7952:22: got struct ieee80211_sta_he_cap const [noderef] __iftype_data *
|
||||
|
||||
The problem here is that we are accessing sband->iftype_data directly even
|
||||
though we should use for_each_sband_iftype_data() or similar. Fortunately
|
||||
there's ieee80211_get_he_iftype_cap_vif() which is just what we need here so
|
||||
use it to get HE capabilities.
|
||||
|
||||
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.23
|
||||
|
||||
Reported-by: Johannes Berg <johannes@sipsolutions.net>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230927142708.2897504-2-kvalo@kernel.org
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -7913,12 +7913,14 @@ ath11k_mac_get_tx_mcs_map(const struct i
|
||||
|
||||
static bool
|
||||
ath11k_mac_bitrate_mask_get_single_nss(struct ath11k *ar,
|
||||
+ struct ath11k_vif *arvif,
|
||||
enum nl80211_band band,
|
||||
const struct cfg80211_bitrate_mask *mask,
|
||||
int *nss)
|
||||
{
|
||||
struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
|
||||
u16 vht_mcs_map = le16_to_cpu(sband->vht_cap.vht_mcs.tx_mcs_map);
|
||||
+ const struct ieee80211_sta_he_cap *he_cap;
|
||||
u16 he_mcs_map = 0;
|
||||
u8 ht_nss_mask = 0;
|
||||
u8 vht_nss_mask = 0;
|
||||
@@ -7949,7 +7951,11 @@ ath11k_mac_bitrate_mask_get_single_nss(s
|
||||
return false;
|
||||
}
|
||||
|
||||
- he_mcs_map = le16_to_cpu(ath11k_mac_get_tx_mcs_map(&sband->iftype_data->he_cap));
|
||||
+ he_cap = ieee80211_get_he_iftype_cap_vif(sband, arvif->vif);
|
||||
+ if (!he_cap)
|
||||
+ return false;
|
||||
+
|
||||
+ he_mcs_map = le16_to_cpu(ath11k_mac_get_tx_mcs_map(he_cap));
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mask->control[band].he_mcs); i++) {
|
||||
if (mask->control[band].he_mcs[i] == 0)
|
||||
@@ -8365,7 +8371,7 @@ ath11k_mac_op_set_bitrate_mask(struct ie
|
||||
ieee80211_iterate_stations_atomic(ar->hw,
|
||||
ath11k_mac_disable_peer_fixed_rate,
|
||||
arvif);
|
||||
- } else if (ath11k_mac_bitrate_mask_get_single_nss(ar, band, mask,
|
||||
+ } else if (ath11k_mac_bitrate_mask_get_single_nss(ar, arvif, band, mask,
|
||||
&single_nss)) {
|
||||
rate = WMI_FIXED_RATE_NONE;
|
||||
nss = single_nss;
|
||||
-31
@@ -1,31 +0,0 @@
|
||||
From 25edca7bb18a2a40cc7e54c6f522e9b3c917e2c5 Mon Sep 17 00:00:00 2001
|
||||
From: Sriram R <quic_srirrama@quicinc.com>
|
||||
Date: Fri, 2 Dec 2022 23:37:15 +0200
|
||||
Subject: [PATCH] wifi: ath11k: add ipq5018 device support
|
||||
|
||||
ipq5018 is a ahb 2ghz device, enable the compatible support for
|
||||
ipq5018 in ahb.
|
||||
|
||||
Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
|
||||
Co-developed-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221122132152.17771-9-quic_kathirve@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/ahb.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||
@@ -32,6 +32,9 @@ static const struct of_device_id ath11k_
|
||||
{ .compatible = "qcom,wcn6750-wifi",
|
||||
.data = (void *)ATH11K_HW_WCN6750_HW10,
|
||||
},
|
||||
+ { .compatible = "qcom,ipq5018-wifi",
|
||||
+ .data = (void *)ATH11K_HW_IPQ5018_HW10,
|
||||
+ },
|
||||
{ }
|
||||
};
|
||||
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
From 69fcb525905600a151997cd16367bb92c34a2b14 Mon Sep 17 00:00:00 2001
|
||||
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Date: Tue, 3 Oct 2023 17:26:54 +0300
|
||||
Subject: [PATCH] wifi: ath11k: fix CAC running state during virtual interface
|
||||
start
|
||||
|
||||
Currently channel definition's primary channel's DFS CAC time
|
||||
as well as primary channel's state i.e usable are used to set
|
||||
the CAC_RUNNING flag for the ath11k radio structure. However,
|
||||
this is wrong since certain channel definition are possbile
|
||||
where primary channel may not be a DFS channel but, secondary
|
||||
channel is a DFS channel. For example - channel 36 with 160 MHz
|
||||
bandwidth.
|
||||
In such cases, the flag will not be set which is wrong.
|
||||
|
||||
Fix this issue by using cfg80211_chandef_dfs_usable() function
|
||||
from cfg80211 which return trues if at least one channel is in
|
||||
usable state.
|
||||
|
||||
While at it, modify the CAC running debug log message to print
|
||||
the CAC time as well in milli-seconds.
|
||||
|
||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230912051857.2284-3-quic_adisi@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 19 +++++++++++--------
|
||||
1 file changed, 11 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
#include <net/mac80211.h>
|
||||
+#include <net/cfg80211.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/inetdevice.h>
|
||||
@@ -7196,6 +7197,7 @@ ath11k_mac_vdev_start_restart(struct ath
|
||||
struct wmi_vdev_start_req_arg arg = {};
|
||||
const struct cfg80211_chan_def *chandef = &ctx->def;
|
||||
int ret = 0;
|
||||
+ unsigned int dfs_cac_time;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
@@ -7275,20 +7277,21 @@ ath11k_mac_vdev_start_restart(struct ath
|
||||
ath11k_dbg(ab, ATH11K_DBG_MAC, "vdev %pM started, vdev_id %d\n",
|
||||
arvif->vif->addr, arvif->vdev_id);
|
||||
|
||||
- /* Enable CAC Flag in the driver by checking the channel DFS cac time,
|
||||
- * i.e dfs_cac_ms value which will be valid only for radar channels
|
||||
- * and state as NL80211_DFS_USABLE which indicates CAC needs to be
|
||||
+ /* Enable CAC Flag in the driver by checking the all sub-channel's DFS
|
||||
+ * state as NL80211_DFS_USABLE which indicates CAC needs to be
|
||||
* done before channel usage. This flags is used to drop rx packets.
|
||||
* during CAC.
|
||||
*/
|
||||
/* TODO Set the flag for other interface types as required */
|
||||
- if (arvif->vdev_type == WMI_VDEV_TYPE_AP &&
|
||||
- chandef->chan->dfs_cac_ms &&
|
||||
- chandef->chan->dfs_state == NL80211_DFS_USABLE) {
|
||||
+ if (arvif->vdev_type == WMI_VDEV_TYPE_AP && ctx->radar_enabled &&
|
||||
+ cfg80211_chandef_dfs_usable(ar->hw->wiphy, chandef)) {
|
||||
set_bit(ATH11K_CAC_RUNNING, &ar->dev_flags);
|
||||
+ dfs_cac_time = cfg80211_chandef_dfs_cac_time(ar->hw->wiphy,
|
||||
+ chandef);
|
||||
ath11k_dbg(ab, ATH11K_DBG_MAC,
|
||||
- "CAC Started in chan_freq %d for vdev %d\n",
|
||||
- arg.channel.freq, arg.vdev_id);
|
||||
+ "cac started dfs_cac_time %u center_freq %d center_freq1 %d for vdev %d\n",
|
||||
+ dfs_cac_time, arg.channel.freq, chandef->center_freq1,
|
||||
+ arg.vdev_id);
|
||||
}
|
||||
|
||||
ret = ath11k_mac_set_txbf_conf(arvif);
|
||||
-161
@@ -1,161 +0,0 @@
|
||||
From d45daa6d1a8da080f1b516c570a8428a7b9225e4 Mon Sep 17 00:00:00 2001
|
||||
From: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Date: Tue, 6 Dec 2022 00:51:25 +0530
|
||||
Subject: [PATCH] wifi: ath11k: Fix scan request param frame size warning
|
||||
|
||||
Following warning was observed
|
||||
|
||||
drivers/net/wireless/ath/ath11k/mac.c:2351:1: warning: the frame
|
||||
size of 1184 bytes is larger than 1024 bytes [-Wframe-larger-than=]
|
||||
|
||||
A local variable is declared with a size larger than 1024 bytes
|
||||
this causing a compilation warning. Change the local variable to
|
||||
heap memory to fix the warning.
|
||||
|
||||
Tested-on: IPQ8074 AHB WLAN.HK.2.7.0.1-01701-QCAHKSWPL_SILICONZ-1 v2
|
||||
|
||||
Signed-off-by: Karthikeyan Kathirvel <quic_kathirve@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221205192125.13533-1-quic_kathirve@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 83 +++++++++++++++------------
|
||||
1 file changed, 45 insertions(+), 38 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -3609,7 +3609,7 @@ static int ath11k_mac_op_hw_scan(struct
|
||||
struct ath11k *ar = hw->priv;
|
||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||
struct cfg80211_scan_request *req = &hw_req->req;
|
||||
- struct scan_req_params arg;
|
||||
+ struct scan_req_params *arg = NULL;
|
||||
int ret = 0;
|
||||
int i;
|
||||
u32 scan_timeout;
|
||||
@@ -3637,72 +3637,78 @@ static int ath11k_mac_op_hw_scan(struct
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
- memset(&arg, 0, sizeof(arg));
|
||||
- ath11k_wmi_start_scan_init(ar, &arg);
|
||||
- arg.vdev_id = arvif->vdev_id;
|
||||
- arg.scan_id = ATH11K_SCAN_ID;
|
||||
+ arg = kzalloc(sizeof(*arg), GFP_KERNEL);
|
||||
+
|
||||
+ if (!arg) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto exit;
|
||||
+ }
|
||||
+
|
||||
+ ath11k_wmi_start_scan_init(ar, arg);
|
||||
+ arg->vdev_id = arvif->vdev_id;
|
||||
+ arg->scan_id = ATH11K_SCAN_ID;
|
||||
|
||||
if (req->ie_len) {
|
||||
- arg.extraie.ptr = kmemdup(req->ie, req->ie_len, GFP_KERNEL);
|
||||
- if (!arg.extraie.ptr) {
|
||||
+ arg->extraie.ptr = kmemdup(req->ie, req->ie_len, GFP_KERNEL);
|
||||
+ if (!arg->extraie.ptr) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
- arg.extraie.len = req->ie_len;
|
||||
+ arg->extraie.len = req->ie_len;
|
||||
}
|
||||
|
||||
if (req->n_ssids) {
|
||||
- arg.num_ssids = req->n_ssids;
|
||||
- for (i = 0; i < arg.num_ssids; i++) {
|
||||
- arg.ssid[i].length = req->ssids[i].ssid_len;
|
||||
- memcpy(&arg.ssid[i].ssid, req->ssids[i].ssid,
|
||||
+ arg->num_ssids = req->n_ssids;
|
||||
+ for (i = 0; i < arg->num_ssids; i++) {
|
||||
+ arg->ssid[i].length = req->ssids[i].ssid_len;
|
||||
+ memcpy(&arg->ssid[i].ssid, req->ssids[i].ssid,
|
||||
req->ssids[i].ssid_len);
|
||||
}
|
||||
} else {
|
||||
- arg.scan_flags |= WMI_SCAN_FLAG_PASSIVE;
|
||||
+ arg->scan_flags |= WMI_SCAN_FLAG_PASSIVE;
|
||||
}
|
||||
|
||||
if (req->n_channels) {
|
||||
- arg.num_chan = req->n_channels;
|
||||
- arg.chan_list = kcalloc(arg.num_chan, sizeof(*arg.chan_list),
|
||||
- GFP_KERNEL);
|
||||
+ arg->num_chan = req->n_channels;
|
||||
+ arg->chan_list = kcalloc(arg->num_chan, sizeof(*arg->chan_list),
|
||||
+ GFP_KERNEL);
|
||||
|
||||
- if (!arg.chan_list) {
|
||||
+ if (!arg->chan_list) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- for (i = 0; i < arg.num_chan; i++)
|
||||
- arg.chan_list[i] = req->channels[i]->center_freq;
|
||||
+ for (i = 0; i < arg->num_chan; i++)
|
||||
+ arg->chan_list[i] = req->channels[i]->center_freq;
|
||||
}
|
||||
|
||||
if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
|
||||
- arg.scan_f_add_spoofed_mac_in_probe = 1;
|
||||
- ether_addr_copy(arg.mac_addr.addr, req->mac_addr);
|
||||
- ether_addr_copy(arg.mac_mask.addr, req->mac_addr_mask);
|
||||
+ arg->scan_f_add_spoofed_mac_in_probe = 1;
|
||||
+ ether_addr_copy(arg->mac_addr.addr, req->mac_addr);
|
||||
+ ether_addr_copy(arg->mac_mask.addr, req->mac_addr_mask);
|
||||
}
|
||||
|
||||
/* if duration is set, default dwell times will be overwritten */
|
||||
if (req->duration) {
|
||||
- arg.dwell_time_active = req->duration;
|
||||
- arg.dwell_time_active_2g = req->duration;
|
||||
- arg.dwell_time_active_6g = req->duration;
|
||||
- arg.dwell_time_passive = req->duration;
|
||||
- arg.dwell_time_passive_6g = req->duration;
|
||||
- arg.burst_duration = req->duration;
|
||||
+ arg->dwell_time_active = req->duration;
|
||||
+ arg->dwell_time_active_2g = req->duration;
|
||||
+ arg->dwell_time_active_6g = req->duration;
|
||||
+ arg->dwell_time_passive = req->duration;
|
||||
+ arg->dwell_time_passive_6g = req->duration;
|
||||
+ arg->burst_duration = req->duration;
|
||||
|
||||
- scan_timeout = min_t(u32, arg.max_rest_time *
|
||||
- (arg.num_chan - 1) + (req->duration +
|
||||
+ scan_timeout = min_t(u32, arg->max_rest_time *
|
||||
+ (arg->num_chan - 1) + (req->duration +
|
||||
ATH11K_SCAN_CHANNEL_SWITCH_WMI_EVT_OVERHEAD) *
|
||||
- arg.num_chan, arg.max_scan_time);
|
||||
+ arg->num_chan, arg->max_scan_time);
|
||||
} else {
|
||||
- scan_timeout = arg.max_scan_time;
|
||||
+ scan_timeout = arg->max_scan_time;
|
||||
}
|
||||
|
||||
/* Add a margin to account for event/command processing */
|
||||
scan_timeout += ATH11K_MAC_SCAN_CMD_EVT_OVERHEAD;
|
||||
|
||||
- ret = ath11k_start_scan(ar, &arg);
|
||||
+ ret = ath11k_start_scan(ar, arg);
|
||||
if (ret) {
|
||||
ath11k_warn(ar->ab, "failed to start hw scan: %d\n", ret);
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
@@ -3714,10 +3720,11 @@ static int ath11k_mac_op_hw_scan(struct
|
||||
msecs_to_jiffies(scan_timeout));
|
||||
|
||||
exit:
|
||||
- kfree(arg.chan_list);
|
||||
-
|
||||
- if (req->ie_len)
|
||||
- kfree(arg.extraie.ptr);
|
||||
+ if (arg) {
|
||||
+ kfree(arg->chan_list);
|
||||
+ kfree(arg->extraie.ptr);
|
||||
+ kfree(arg);
|
||||
+ }
|
||||
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
From 77f1ee6fd8b6e470f721d05a2e269039d5cafcb7 Mon Sep 17 00:00:00 2001
|
||||
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Date: Tue, 3 Oct 2023 17:26:54 +0300
|
||||
Subject: [PATCH] wifi: ath11k: fix Tx power value during active CAC
|
||||
|
||||
Tx power is fetched from firmware's pdev stats. However, during active
|
||||
CAC, firmware does not fill the current Tx power and sends the max
|
||||
initialised value filled during firmware init. If host sends this power
|
||||
to user space, this is wrong since in certain situations, the Tx power
|
||||
could be greater than the max allowed by the regulatory. Hence, host
|
||||
should not be fetching the Tx power during an active CAC.
|
||||
|
||||
Fix this issue by returning -EAGAIN error so that user space knows that there's
|
||||
no valid value available.
|
||||
|
||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Fixes: 9a2aa68afe3d ("wifi: ath11k: add get_txpower mac ops")
|
||||
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230912051857.2284-4-quic_adisi@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -9068,6 +9068,14 @@ static int ath11k_mac_op_get_txpower(str
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
+ /* Firmware doesn't provide Tx power during CAC hence no need to fetch
|
||||
+ * the stats.
|
||||
+ */
|
||||
+ if (test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags)) {
|
||||
+ mutex_unlock(&ar->conf_mutex);
|
||||
+ return -EAGAIN;
|
||||
+ }
|
||||
+
|
||||
req_param.pdev_id = ar->pdev->pdev_id;
|
||||
req_param.stats_id = WMI_REQUEST_PDEV_STAT;
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From e149353e6562f3e3246f75dfc4cca6a0cc5b4efc Mon Sep 17 00:00:00 2001
|
||||
From: Aloka Dixit <quic_alokad@quicinc.com>
|
||||
Date: Mon, 9 Oct 2023 10:13:54 +0300
|
||||
Subject: [PATCH] wifi: ath11k: call ath11k_mac_fils_discovery() without
|
||||
condition
|
||||
|
||||
Mac80211 does not set flags BSS_CHANGED_FILS_DISCOVERY and
|
||||
BSS_CHANGED_UNSOL_BCAST_PROBE_RESP if there are no updates to
|
||||
FILS discovery and unsolicited broadcast probe response transmission
|
||||
configurations respectively. This results in the transmissions getting
|
||||
stopped during BSS change operations which do not include these
|
||||
attributes. Remove the checks for the flags and always send the existing
|
||||
configuration to firmware.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20231004044915.6817-1-quic_alokad@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -3732,9 +3732,7 @@ static void ath11k_mac_op_bss_info_chang
|
||||
arvif->vdev_id, ret);
|
||||
}
|
||||
|
||||
- if (changed & BSS_CHANGED_FILS_DISCOVERY ||
|
||||
- changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP)
|
||||
- ath11k_mac_fils_discovery(arvif, info);
|
||||
+ ath11k_mac_fils_discovery(arvif, info);
|
||||
|
||||
if (changed & BSS_CHANGED_ARP_FILTER) {
|
||||
ipv4_cnt = min(vif->cfg.arp_addr_cnt, ATH11K_IPV4_MAX_COUNT);
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
From a47111663491ff2829df0626493ce81b48dd880a Mon Sep 17 00:00:00 2001
|
||||
From: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Date: Tue, 10 Oct 2023 09:22:50 +0300
|
||||
Subject: [PATCH] wifi: ath11k: ath11k_debugfs_register(): fix
|
||||
format-truncation warning
|
||||
|
||||
In v6.6-rc4 with GCC 13.2 I see a new warning:
|
||||
|
||||
drivers/net/wireless/ath/ath11k/debugfs.c: In function 'ath11k_debugfs_register':
|
||||
drivers/net/wireless/ath/ath11k/debugfs.c:1597:51: error: '%d' directive output may be truncated writing between 1 and 3 bytes into a region of size 2 [-Werror=format-truncation=]
|
||||
drivers/net/wireless/ath/ath11k/debugfs.c:1597:48: note: directive argument in the range [0, 255]
|
||||
drivers/net/wireless/ath/ath11k/debugfs.c:1597:9: note: 'snprintf' output between 5 and 7 bytes into a destination of size 5
|
||||
|
||||
Increase the size of pdev_name to 10 bytes to make sure there's enough room for
|
||||
the string. Also change the format to '%u' as ar->pdev_idx is u8.
|
||||
|
||||
Compile tested only.
|
||||
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20231010062250.2580951-1-kvalo@kernel.org
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/debugfs.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/debugfs.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/debugfs.c
|
||||
@@ -1591,10 +1591,10 @@ static const struct file_operations fops
|
||||
int ath11k_debugfs_register(struct ath11k *ar)
|
||||
{
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
- char pdev_name[5];
|
||||
+ char pdev_name[10];
|
||||
char buf[100] = {0};
|
||||
|
||||
- snprintf(pdev_name, sizeof(pdev_name), "%s%d", "mac", ar->pdev_idx);
|
||||
+ snprintf(pdev_name, sizeof(pdev_name), "%s%u", "mac", ar->pdev_idx);
|
||||
|
||||
ar->debug.debugfs_pdev = debugfs_create_dir(pdev_name, ab->debugfs_soc);
|
||||
if (IS_ERR(ar->debug.debugfs_pdev))
|
||||
-169
@@ -1,169 +0,0 @@
|
||||
From a27c6a5853eb9d4f293b99be73a6891fe88263c7 Mon Sep 17 00:00:00 2001
|
||||
From: Sowmiya Sree Elavalagan <quic_ssreeela@quicinc.com>
|
||||
Date: Tue, 10 Jan 2023 15:30:57 +0200
|
||||
Subject: [PATCH] wifi: ath11k: Add support to configure FTM responder role
|
||||
|
||||
Fine Timing Measurement(FTM) support is used to measure round trip
|
||||
time between two nodes.
|
||||
|
||||
Enable FTM responder feature using hw_params on supported device.
|
||||
Since FTM functionality is offloaded to firmware, adding the
|
||||
interface allows user space to enable or disable FTM responder.
|
||||
Also add support for advertising the same in extended capabilities.
|
||||
|
||||
QCA6390, WCN6855 and WCN6750 do not support this feature.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Sowmiya Sree Elavalagan <quic_ssreeela@quicinc.com>
|
||||
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221220044435.10506-1-quic_rajkbhag@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 8 ++++++++
|
||||
drivers/net/wireless/ath/ath11k/core.h | 1 +
|
||||
drivers/net/wireless/ath/ath11k/hw.h | 1 +
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 20 +++++++++++++++++++-
|
||||
drivers/net/wireless/ath/ath11k/wmi.h | 1 +
|
||||
5 files changed, 30 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -116,6 +116,7 @@ static const struct ath11k_hw_params ath
|
||||
.tcl_ring_retry = true,
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
+ .ftm_responder = true,
|
||||
},
|
||||
{
|
||||
.hw_rev = ATH11K_HW_IPQ6018_HW10,
|
||||
@@ -198,6 +199,7 @@ static const struct ath11k_hw_params ath
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
.support_fw_mac_sequence = false,
|
||||
+ .ftm_responder = true,
|
||||
},
|
||||
{
|
||||
.name = "qca6390 hw2.0",
|
||||
@@ -282,6 +284,7 @@ static const struct ath11k_hw_params ath
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
.support_fw_mac_sequence = true,
|
||||
+ .ftm_responder = false,
|
||||
},
|
||||
{
|
||||
.name = "qcn9074 hw1.0",
|
||||
@@ -363,6 +366,7 @@ static const struct ath11k_hw_params ath
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
.support_fw_mac_sequence = false,
|
||||
+ .ftm_responder = true,
|
||||
},
|
||||
{
|
||||
.name = "wcn6855 hw2.0",
|
||||
@@ -447,6 +451,7 @@ static const struct ath11k_hw_params ath
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
.support_fw_mac_sequence = true,
|
||||
+ .ftm_responder = false,
|
||||
},
|
||||
{
|
||||
.name = "wcn6855 hw2.1",
|
||||
@@ -529,6 +534,7 @@ static const struct ath11k_hw_params ath
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
.support_fw_mac_sequence = true,
|
||||
+ .ftm_responder = false,
|
||||
},
|
||||
{
|
||||
.name = "wcn6750 hw1.0",
|
||||
@@ -609,6 +615,7 @@ static const struct ath11k_hw_params ath
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE_WCN6750,
|
||||
.smp2p_wow_exit = true,
|
||||
.support_fw_mac_sequence = true,
|
||||
+ .ftm_responder = false,
|
||||
},
|
||||
{
|
||||
.hw_rev = ATH11K_HW_IPQ5018_HW10,
|
||||
@@ -688,6 +695,7 @@ static const struct ath11k_hw_params ath
|
||||
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||||
.smp2p_wow_exit = false,
|
||||
.support_fw_mac_sequence = false,
|
||||
+ .ftm_responder = true,
|
||||
},
|
||||
};
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -346,6 +346,7 @@ struct ath11k_vif {
|
||||
|
||||
bool is_started;
|
||||
bool is_up;
|
||||
+ bool ftm_responder;
|
||||
bool spectral_enabled;
|
||||
bool ps;
|
||||
u32 aid;
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
||||
@@ -224,6 +224,7 @@ struct ath11k_hw_params {
|
||||
u32 tx_ring_size;
|
||||
bool smp2p_wow_exit;
|
||||
bool support_fw_mac_sequence;
|
||||
+ bool ftm_responder;
|
||||
};
|
||||
|
||||
struct ath11k_hw_ops {
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -3107,7 +3107,7 @@ static void ath11k_mac_op_bss_info_chang
|
||||
u16 bitrate;
|
||||
int ret = 0;
|
||||
u8 rateidx;
|
||||
- u32 rate;
|
||||
+ u32 rate, param;
|
||||
u32 ipv4_cnt;
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
@@ -3409,6 +3409,20 @@ static void ath11k_mac_op_bss_info_chang
|
||||
}
|
||||
}
|
||||
|
||||
+ if (changed & BSS_CHANGED_FTM_RESPONDER &&
|
||||
+ arvif->ftm_responder != info->ftm_responder &&
|
||||
+ ar->ab->hw_params.ftm_responder &&
|
||||
+ (vif->type == NL80211_IFTYPE_AP ||
|
||||
+ vif->type == NL80211_IFTYPE_MESH_POINT)) {
|
||||
+ arvif->ftm_responder = info->ftm_responder;
|
||||
+ param = WMI_VDEV_PARAM_ENABLE_DISABLE_RTT_RESPONDER_ROLE;
|
||||
+ ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
|
||||
+ arvif->ftm_responder);
|
||||
+ if (ret)
|
||||
+ ath11k_warn(ar->ab, "Failed to set ftm responder %i: %d\n",
|
||||
+ arvif->vdev_id, ret);
|
||||
+ }
|
||||
+
|
||||
if (changed & BSS_CHANGED_FILS_DISCOVERY ||
|
||||
changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP)
|
||||
ath11k_mac_fils_discovery(arvif, info);
|
||||
@@ -9125,6 +9139,10 @@ static int __ath11k_mac_register(struct
|
||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
||||
|
||||
+ if (ab->hw_params.ftm_responder)
|
||||
+ wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
+ NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER);
|
||||
+
|
||||
ath11k_reg_init(ar);
|
||||
|
||||
if (!test_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags)) {
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
@@ -1073,6 +1073,7 @@ enum wmi_tlv_vdev_param {
|
||||
WMI_VDEV_PARAM_ENABLE_BCAST_PROBE_RESPONSE,
|
||||
WMI_VDEV_PARAM_FILS_MAX_CHANNEL_GUARD_TIME,
|
||||
WMI_VDEV_PARAM_HE_LTF = 0x74,
|
||||
+ WMI_VDEV_PARAM_ENABLE_DISABLE_RTT_RESPONDER_ROLE = 0x7d,
|
||||
WMI_VDEV_PARAM_BA_MODE = 0x7e,
|
||||
WMI_VDEV_PARAM_AUTORATE_MISC_CFG = 0x80,
|
||||
WMI_VDEV_PARAM_SET_HE_SOUNDING_MODE = 0x87,
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
From 534c2dd8099a9cc4bad8ea8b3c7fa1f730e10d5d Mon Sep 17 00:00:00 2001
|
||||
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Date: Tue, 10 Oct 2023 10:27:19 +0300
|
||||
Subject: [PATCH] wifi: ath11k: add parsing of phy bitmap for reg rules
|
||||
|
||||
Certain regulatory domains could put restrictions on phy mode operation.
|
||||
For example, in a few countries HE Operation is not allowed. For such
|
||||
countries, firmware indicates this via phy bitmap in each reg rule.
|
||||
|
||||
Currently, there is no logic to parse this info and then pass it on to the
|
||||
cfg80211/regulatory.
|
||||
|
||||
Add parsing of this phy bitmap from the regulatory channel change event and
|
||||
then accordingly map it to cfg80211/regulatory flags and pass it on to it.
|
||||
|
||||
While at it, correct typo in debug print s/dsf/dfs.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20231004092655.25020-1-quic_adisi@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/reg.c | 11 +++++++++++
|
||||
drivers/net/wireless/ath/ath11k/reg.h | 3 +++
|
||||
drivers/net/wireless/ath/ath11k/wmi.c | 5 +++--
|
||||
3 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/reg.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/reg.c
|
||||
@@ -352,6 +352,16 @@ static u32 ath11k_map_fw_reg_flags(u16 r
|
||||
return flags;
|
||||
}
|
||||
|
||||
+static u32 ath11k_map_fw_phy_flags(u32 phy_flags)
|
||||
+{
|
||||
+ u32 flags = 0;
|
||||
+
|
||||
+ if (phy_flags & ATH11K_REG_PHY_BITMAP_NO11AX)
|
||||
+ flags |= NL80211_RRF_NO_HE;
|
||||
+
|
||||
+ return flags;
|
||||
+}
|
||||
+
|
||||
static bool
|
||||
ath11k_reg_can_intersect(struct ieee80211_reg_rule *rule1,
|
||||
struct ieee80211_reg_rule *rule2)
|
||||
@@ -685,6 +695,7 @@ ath11k_reg_build_regd(struct ath11k_base
|
||||
}
|
||||
|
||||
flags |= ath11k_map_fw_reg_flags(reg_rule->flags);
|
||||
+ flags |= ath11k_map_fw_phy_flags(reg_info->phybitmap);
|
||||
|
||||
ath11k_reg_update_rule(tmp_regd->reg_rules + i,
|
||||
reg_rule->start_freq,
|
||||
--- a/drivers/net/wireless/ath/ath11k/reg.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/reg.h
|
||||
@@ -24,6 +24,9 @@ enum ath11k_dfs_region {
|
||||
ATH11K_DFS_REG_UNDEF,
|
||||
};
|
||||
|
||||
+/* Phy bitmaps */
|
||||
+#define ATH11K_REG_PHY_BITMAP_NO11AX BIT(5)
|
||||
+
|
||||
/* ATH11K Regulatory API's */
|
||||
void ath11k_reg_init(struct ath11k *ar);
|
||||
void ath11k_reg_free(struct ath11k_base *ab);
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -5440,10 +5440,11 @@ static int ath11k_pull_reg_chan_list_ext
|
||||
}
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_WMI,
|
||||
- "cc_ext %s dsf %d BW: min_2ghz %d max_2ghz %d min_5ghz %d max_5ghz %d",
|
||||
+ "cc_ext %s dfs %d BW: min_2ghz %d max_2ghz %d min_5ghz %d max_5ghz %d phy_bitmap 0x%x",
|
||||
reg_info->alpha2, reg_info->dfs_region,
|
||||
reg_info->min_bw_2ghz, reg_info->max_bw_2ghz,
|
||||
- reg_info->min_bw_5ghz, reg_info->max_bw_5ghz);
|
||||
+ reg_info->min_bw_5ghz, reg_info->max_bw_5ghz,
|
||||
+ reg_info->phybitmap);
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_WMI,
|
||||
"num_2ghz_reg_rules %d num_5ghz_reg_rules %d",
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
From 480d230bef0ecd06e72ae3a84117142e38e77503 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Date: Mon, 9 Oct 2023 09:36:54 -0700
|
||||
Subject: [PATCH] wifi: ath11k: Remove unused struct ath11k_htc_frame
|
||||
|
||||
struct ath11k_htc_frame is unused, and since it illogically contains
|
||||
two consecutive flexible arrays, it could never be used, so remove it.
|
||||
|
||||
No functional changes, compile tested only.
|
||||
|
||||
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20231009-ath11k_htc_frame-v1-1-81d405b7a195@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/htc.h | 12 ------------
|
||||
1 file changed, 12 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/htc.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/htc.h
|
||||
@@ -156,18 +156,6 @@ struct ath11k_htc_record {
|
||||
};
|
||||
} __packed __aligned(4);
|
||||
|
||||
-/* note: the trailer offset is dynamic depending
|
||||
- * on payload length. this is only a struct layout draft
|
||||
- */
|
||||
-struct ath11k_htc_frame {
|
||||
- struct ath11k_htc_hdr hdr;
|
||||
- union {
|
||||
- struct ath11k_htc_msg msg;
|
||||
- u8 payload[0];
|
||||
- };
|
||||
- struct ath11k_htc_record trailer[0];
|
||||
-} __packed __aligned(4);
|
||||
-
|
||||
enum ath11k_htc_svc_gid {
|
||||
ATH11K_HTC_SVC_GRP_RSVD = 0,
|
||||
ATH11K_HTC_SVC_GRP_WMI = 1,
|
||||
-41
@@ -1,41 +0,0 @@
|
||||
From e5e94d10c85653609a2893c8d0ef24a27471b68f Mon Sep 17 00:00:00 2001
|
||||
From: Wen Gong <quic_wgong@quicinc.com>
|
||||
Date: Tue, 10 Jan 2023 15:30:58 +0200
|
||||
Subject: [PATCH] wifi: ath11k: add channel 177 into 5 GHz channel list
|
||||
|
||||
Add support for the 5 GHz channel 177 with center frequency 5885 MHz and
|
||||
operating class 125 per IEEE Std 802.11ax-2021, Table E-4.
|
||||
|
||||
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3
|
||||
|
||||
Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221220101912.30816-1-quic_wgong@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.h | 4 ++--
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 1 +
|
||||
2 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -521,8 +521,8 @@ struct ath11k_sta {
|
||||
#define ATH11K_MIN_5G_FREQ 4150
|
||||
#define ATH11K_MIN_6G_FREQ 5925
|
||||
#define ATH11K_MAX_6G_FREQ 7115
|
||||
-#define ATH11K_NUM_CHANS 101
|
||||
-#define ATH11K_MAX_5G_CHAN 173
|
||||
+#define ATH11K_NUM_CHANS 102
|
||||
+#define ATH11K_MAX_5G_CHAN 177
|
||||
|
||||
enum ath11k_state {
|
||||
ATH11K_STATE_OFF,
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -96,6 +96,7 @@ static const struct ieee80211_channel at
|
||||
CHAN5G(165, 5825, 0),
|
||||
CHAN5G(169, 5845, 0),
|
||||
CHAN5G(173, 5865, 0),
|
||||
+ CHAN5G(177, 5885, 0),
|
||||
};
|
||||
|
||||
static const struct ieee80211_channel ath11k_6ghz_channels[] = {
|
||||
+384
@@ -0,0 +1,384 @@
|
||||
From 10c65f97b424fcee439463f933140df2a0022f98 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Date: Mon, 9 Oct 2023 09:39:42 -0700
|
||||
Subject: [PATCH] wifi: ath11k: Introduce and use ath11k_sta_to_arsta()
|
||||
|
||||
Currently, the logic to return an ath11k_sta pointer, given a
|
||||
ieee80211_sta pointer, uses typecasting throughout the driver. In
|
||||
general, conversion functions are preferable to typecasting since
|
||||
using a conversion function allows the compiler to validate the types
|
||||
of both the input and output parameters.
|
||||
|
||||
ath11k already defines a conversion function ath11k_vif_to_arvif() for
|
||||
a similar conversion. So introduce ath11k_sta_to_arsta() for this use
|
||||
case, and convert all of the existing typecasting to use this
|
||||
function.
|
||||
|
||||
No functional changes, compile tested only.
|
||||
|
||||
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20231009-ath11k_sta_to_arsta-v1-1-1563e3a307e8@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.h | 5 ++++
|
||||
drivers/net/wireless/ath/ath11k/debugfs.c | 4 +--
|
||||
drivers/net/wireless/ath/ath11k/debugfs_sta.c | 30 +++++++++----------
|
||||
drivers/net/wireless/ath/ath11k/dp_rx.c | 8 ++---
|
||||
drivers/net/wireless/ath/ath11k/dp_tx.c | 4 +--
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 18 +++++------
|
||||
drivers/net/wireless/ath/ath11k/peer.c | 2 +-
|
||||
drivers/net/wireless/ath/ath11k/wmi.c | 6 ++--
|
||||
8 files changed, 41 insertions(+), 36 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -1223,6 +1223,11 @@ static inline struct ath11k_vif *ath11k_
|
||||
return (struct ath11k_vif *)vif->drv_priv;
|
||||
}
|
||||
|
||||
+static inline struct ath11k_sta *ath11k_sta_to_arsta(struct ieee80211_sta *sta)
|
||||
+{
|
||||
+ return (struct ath11k_sta *)sta->drv_priv;
|
||||
+}
|
||||
+
|
||||
static inline struct ath11k *ath11k_ab_to_ar(struct ath11k_base *ab,
|
||||
int mac_id)
|
||||
{
|
||||
--- a/drivers/net/wireless/ath/ath11k/debugfs.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/debugfs.c
|
||||
@@ -1459,7 +1459,7 @@ static void ath11k_reset_peer_ps_duratio
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct ath11k *ar = data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
arsta->ps_total_duration = 0;
|
||||
@@ -1510,7 +1510,7 @@ static void ath11k_peer_ps_state_disable
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct ath11k *ar = data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
arsta->peer_ps_state = WMI_PEER_PS_STATE_DISABLED;
|
||||
--- a/drivers/net/wireless/ath/ath11k/debugfs_sta.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/debugfs_sta.c
|
||||
@@ -136,7 +136,7 @@ static ssize_t ath11k_dbg_sta_dump_tx_st
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
struct ath11k_htt_data_stats *stats;
|
||||
static const char *str_name[ATH11K_STATS_TYPE_MAX] = {"succ", "fail",
|
||||
@@ -243,7 +243,7 @@ static ssize_t ath11k_dbg_sta_dump_rx_st
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
struct ath11k_rx_peer_stats *rx_stats = arsta->rx_stats;
|
||||
int len = 0, i, retval = 0;
|
||||
@@ -340,7 +340,7 @@ static int
|
||||
ath11k_dbg_sta_open_htt_peer_stats(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct ieee80211_sta *sta = inode->i_private;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
struct debug_htt_stats_req *stats_req;
|
||||
int type = ar->debug.htt_stats.type;
|
||||
@@ -376,7 +376,7 @@ static int
|
||||
ath11k_dbg_sta_release_htt_peer_stats(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct ieee80211_sta *sta = inode->i_private;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
@@ -413,7 +413,7 @@ static ssize_t ath11k_dbg_sta_write_peer
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
int ret, enable;
|
||||
|
||||
@@ -453,7 +453,7 @@ static ssize_t ath11k_dbg_sta_read_peer_
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
char buf[32] = {0};
|
||||
int len;
|
||||
@@ -480,7 +480,7 @@ static ssize_t ath11k_dbg_sta_write_delb
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
u32 tid, initiator, reason;
|
||||
int ret;
|
||||
@@ -531,7 +531,7 @@ static ssize_t ath11k_dbg_sta_write_addb
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
u32 tid, status;
|
||||
int ret;
|
||||
@@ -581,7 +581,7 @@ static ssize_t ath11k_dbg_sta_write_addb
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
u32 tid, buf_size;
|
||||
int ret;
|
||||
@@ -632,7 +632,7 @@ static ssize_t ath11k_dbg_sta_read_aggr_
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
char buf[64];
|
||||
int len = 0;
|
||||
@@ -652,7 +652,7 @@ static ssize_t ath11k_dbg_sta_write_aggr
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
u32 aggr_mode;
|
||||
int ret;
|
||||
@@ -697,7 +697,7 @@ ath11k_write_htt_peer_stats_reset(struct
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
struct htt_ext_stats_cfg_params cfg_params = { 0 };
|
||||
int ret;
|
||||
@@ -756,7 +756,7 @@ static ssize_t ath11k_dbg_sta_read_peer_
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
char buf[20];
|
||||
int len;
|
||||
@@ -783,7 +783,7 @@ static ssize_t ath11k_dbg_sta_read_curre
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
u64 time_since_station_in_power_save;
|
||||
char buf[20];
|
||||
@@ -817,7 +817,7 @@ static ssize_t ath11k_dbg_sta_read_total
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
char buf[20];
|
||||
u64 power_save_duration;
|
||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
@@ -1099,7 +1099,7 @@ int ath11k_dp_rx_ampdu_start(struct ath1
|
||||
struct ieee80211_ampdu_params *params)
|
||||
{
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
- struct ath11k_sta *arsta = (void *)params->sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(params->sta);
|
||||
int vdev_id = arsta->arvif->vdev_id;
|
||||
int ret;
|
||||
|
||||
@@ -1117,7 +1117,7 @@ int ath11k_dp_rx_ampdu_stop(struct ath11
|
||||
{
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
struct ath11k_peer *peer;
|
||||
- struct ath11k_sta *arsta = (void *)params->sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(params->sta);
|
||||
int vdev_id = arsta->arvif->vdev_id;
|
||||
dma_addr_t paddr;
|
||||
bool active;
|
||||
@@ -1456,7 +1456,7 @@ ath11k_update_per_peer_tx_stats(struct a
|
||||
}
|
||||
|
||||
sta = peer->sta;
|
||||
- arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
memset(&arsta->txrate, 0, sizeof(arsta->txrate));
|
||||
|
||||
@@ -5248,7 +5248,7 @@ int ath11k_dp_rx_process_mon_status(stru
|
||||
goto next_skb;
|
||||
}
|
||||
|
||||
- arsta = (struct ath11k_sta *)peer->sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(peer->sta);
|
||||
ath11k_dp_rx_update_peer_stats(arsta, ppdu_info);
|
||||
|
||||
if (ath11k_debugfs_is_pktlog_peer_valid(ar, peer->addr))
|
||||
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
|
||||
@@ -467,7 +467,7 @@ void ath11k_dp_tx_update_txcompl(struct
|
||||
}
|
||||
|
||||
sta = peer->sta;
|
||||
- arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
memset(&arsta->txrate, 0, sizeof(arsta->txrate));
|
||||
pkt_type = FIELD_GET(HAL_TX_RATE_STATS_INFO0_PKT_TYPE,
|
||||
@@ -627,7 +627,7 @@ static void ath11k_dp_tx_complete_msdu(s
|
||||
ieee80211_free_txskb(ar->hw, msdu);
|
||||
return;
|
||||
}
|
||||
- arsta = (struct ath11k_sta *)peer->sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(peer->sta);
|
||||
status.sta = peer->sta;
|
||||
status.skb = msdu;
|
||||
status.info = info;
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -2832,7 +2832,7 @@ static void ath11k_peer_assoc_prepare(st
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
- arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
memset(arg, 0, sizeof(*arg));
|
||||
|
||||
@@ -4313,7 +4313,7 @@ static int ath11k_mac_op_set_key(struct
|
||||
ath11k_warn(ab, "peer %pM disappeared!\n", peer_addr);
|
||||
|
||||
if (sta) {
|
||||
- arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
switch (key->cipher) {
|
||||
case WLAN_CIPHER_SUITE_TKIP:
|
||||
@@ -4904,7 +4904,7 @@ static int ath11k_mac_station_add(struct
|
||||
{
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct peer_create_params peer_param;
|
||||
int ret;
|
||||
|
||||
@@ -5028,7 +5028,7 @@ static int ath11k_mac_op_sta_state(struc
|
||||
{
|
||||
struct ath11k *ar = hw->priv;
|
||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k_peer *peer;
|
||||
int ret = 0;
|
||||
|
||||
@@ -5194,7 +5194,7 @@ static void ath11k_mac_op_sta_set_4addr(
|
||||
struct ieee80211_sta *sta, bool enabled)
|
||||
{
|
||||
struct ath11k *ar = hw->priv;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
if (enabled && !arsta->use_4addr_set) {
|
||||
ieee80211_queue_work(ar->hw, &arsta->set_4addr_wk);
|
||||
@@ -5208,7 +5208,7 @@ static void ath11k_mac_op_sta_rc_update(
|
||||
u32 changed)
|
||||
{
|
||||
struct ath11k *ar = hw->priv;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||
struct ath11k_peer *peer;
|
||||
u32 bw, smps;
|
||||
@@ -6201,7 +6201,7 @@ static void ath11k_mac_op_tx(struct ieee
|
||||
}
|
||||
|
||||
if (control->sta)
|
||||
- arsta = (struct ath11k_sta *)control->sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(control->sta);
|
||||
|
||||
ret = ath11k_dp_tx(ar, arvif, arsta, skb);
|
||||
if (unlikely(ret)) {
|
||||
@@ -8233,7 +8233,7 @@ static void ath11k_mac_set_bitrate_mask_
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct ath11k_vif *arvif = data;
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arvif->ar;
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
@@ -8637,7 +8637,7 @@ static void ath11k_mac_op_sta_statistics
|
||||
struct ieee80211_sta *sta,
|
||||
struct station_info *sinfo)
|
||||
{
|
||||
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
struct ath11k *ar = arsta->arvif->ar;
|
||||
s8 signal;
|
||||
bool db2dbm = test_bit(WMI_TLV_SERVICE_HW_DB2DBM_CONVERSION_SUPPORT,
|
||||
--- a/drivers/net/wireless/ath/ath11k/peer.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/peer.c
|
||||
@@ -446,7 +446,7 @@ int ath11k_peer_create(struct ath11k *ar
|
||||
peer->sec_type_grp = HAL_ENCRYPT_TYPE_OPEN;
|
||||
|
||||
if (sta) {
|
||||
- arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(sta);
|
||||
arsta->tcl_metadata |= FIELD_PREP(HTT_TCL_META_DATA_TYPE, 0) |
|
||||
FIELD_PREP(HTT_TCL_META_DATA_PEER_ID,
|
||||
peer->peer_id);
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -6453,7 +6453,7 @@ static int ath11k_wmi_tlv_rssi_chain_par
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
BUILD_BUG_ON(ARRAY_SIZE(arsta->chain_signal) >
|
||||
ARRAY_SIZE(stats_rssi->rssi_avg_beacon));
|
||||
@@ -6541,7 +6541,7 @@ static int ath11k_wmi_tlv_fw_stats_data_
|
||||
arvif->bssid,
|
||||
NULL);
|
||||
if (sta) {
|
||||
- arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(sta);
|
||||
arsta->rssi_beacon = src->beacon_snr;
|
||||
ath11k_dbg(ab, ATH11K_DBG_WMI,
|
||||
"stats vdev id %d snr %d\n",
|
||||
@@ -7468,7 +7468,7 @@ static void ath11k_wmi_event_peer_sta_ps
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||
+ arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
|
||||
-114
@@ -1,114 +0,0 @@
|
||||
From 53a998c4d7284debd77734d01e1466e59a1d03b2 Mon Sep 17 00:00:00 2001
|
||||
From: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
|
||||
Date: Fri, 13 Jan 2023 12:02:09 +0530
|
||||
Subject: [PATCH] wifi: ath11k: fix ce memory mapping for ahb devices
|
||||
|
||||
Currently ath11k_ahb module is not loaded successfully and the wifi
|
||||
interface is not created. Kernel trace is seen while loading the
|
||||
ath11k_ahb module. The issue is seen in all ath11k AHB devices except
|
||||
in IPQ5018.
|
||||
|
||||
This happens because in ath11k_ahb_probe(), ab->mem_ce is initialized
|
||||
with the value of ab->mem. However, at this instant ab->mem is not
|
||||
yet set.
|
||||
|
||||
Later, during write to a particular memory via ath11k_ahb_write32()
|
||||
this ab->mem_ce is used with particular offset. Since ab->mem_ce is
|
||||
not set properly this possibly leads to memory conflict to handle
|
||||
kernel paging request and the below trace is seen.
|
||||
|
||||
[ 93.035047] Unable to handle kernel paging request at virtual address ffff800100a00000
|
||||
[ 93.035083] Mem abort info:
|
||||
[ 93.041869] ESR = 0x0000000096000045
|
||||
[ 93.044561] EC = 0x25: DABT (current EL), IL = 32 bits
|
||||
[ 93.048377] SET = 0, FnV = 0
|
||||
[ 93.053840] EA = 0, S1PTW = 0
|
||||
[ 93.056704] FSC = 0x05: level 1 translation fault
|
||||
[ 93.059745] Data abort info:
|
||||
[ 93.064603] ISV = 0, ISS = 0x00000045
|
||||
[ 93.067729] CM = 0, WnR = 1
|
||||
[ 93.071287] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000042219000
|
||||
[ 93.074409] [ffff800100a00000] pgd=100000007ffff003, p4d=100000007ffff003, pud=0000000000000000
|
||||
[ 93.081195] Internal error: Oops: 0000000096000045 [#1] PREEMPT SMP
|
||||
[ 93.089598] Modules linked in: ath11k_ahb ath11k_pci ath11k qmi_helpers
|
||||
[ 93.095851] CPU: 2 PID: 66 Comm: kworker/u8:3 Not tainted 6.1.0-rc8-wt-ath-658126-g58e4b9df840c-dirty #2
|
||||
[ 93.102454] Hardware name: Qualcomm Technologies, Inc. IPQ8074/AP-HK14 (DT)
|
||||
[ 93.112171] Workqueue: ath11k_qmi_driver_event ath11k_qmi_driver_event_work [ath11k]
|
||||
[ 93.118856] pstate: 40000005 (nZcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
|
||||
[ 93.126838] pc : ath11k_ahb_write32+0xc/0x18 [ath11k_ahb]
|
||||
[ 93.133520] lr : ath11k_hal_srng_setup+0x860/0x8f0 [ath11k]
|
||||
[ 93.139075] sp : ffff80000aaebb70
|
||||
[ 93.144452] x29: ffff80000aaebb70 x28: 0000000000000020 x27: ffff80000aaebc50
|
||||
[ 93.147934] x26: ffff000004923750 x25: ffff000004921200 x24: ffff000004928000
|
||||
[ 93.155051] x23: 0000000000000020 x22: ffff000004930000 x21: ffff000004923200
|
||||
[ 93.162170] x20: ffff000004920000 x19: 00000000eea00000 x18: ffff0000049200f0
|
||||
[ 93.169288] x17: 0000000000000000 x16: 0000000000000000 x15: 000000000000025e
|
||||
[ 93.176405] x14: ffff000003c414f0 x13: 0000000000000000 x12: 0000000000000008
|
||||
[ 93.183524] x11: ffff000003c41488 x10: 0000000000000040 x9 : 0000000000000000
|
||||
[ 93.190641] x8 : ffff80000a9dd100 x7 : 0000000000000000 x6 : 000000000000003f
|
||||
[ 93.197759] x5 : ffff800100a00400 x4 : ffff8000031f4018 x3 : 0000000000000004
|
||||
[ 93.204877] x2 : 0000000047b62000 x1 : ffff800100a00000 x0 : ffff800012000000
|
||||
[ 93.211996] Call trace:
|
||||
[ 93.219104] ath11k_ahb_write32+0xc/0x18 [ath11k_ahb]
|
||||
[ 93.221366] ath11k_ce_init_ring+0x184/0x278 [ath11k]
|
||||
[ 93.226576] ath11k_ce_init_pipes+0x4c/0x1a0 [ath11k]
|
||||
[ 93.231610] ath11k_core_qmi_firmware_ready+0x3c/0x568 [ath11k]
|
||||
[ 93.236646] ath11k_qmi_driver_event_work+0x168/0x4f8 [ath11k]
|
||||
[ 93.242376] process_one_work+0x144/0x350
|
||||
[ 93.248275] worker_thread+0x120/0x430
|
||||
[ 93.252352] kthread+0xf4/0x110
|
||||
[ 93.255997] ret_from_fork+0x10/0x20
|
||||
[ 93.259043] Code: d503201f f94e1c00 8b214001 d50332bf (b9000022)
|
||||
[ 93.262863] ---[ end trace 0000000000000000 ]---
|
||||
|
||||
However, for the device IPQ5018 ath11k_hw_params .ce_remap is
|
||||
defined. This parameter is used to recalculate ab->mem_ce and hence,
|
||||
this issue is not seen in IPQ5018.
|
||||
|
||||
Hence, fix this by initializing ab->mem_ce after ab->mem is set.
|
||||
ab->mem is set inside the ath11k_ahb_setup_resources() therefore
|
||||
initialize ab->mem_ce after ath11k_ahb_setup_resources().
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Fixes: b42b3678c91f ("wifi: ath11k: remap ce register space for IPQ5018")
|
||||
|
||||
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230113063209.7256-1-quic_rajkbhag@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/ahb.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||
@@ -1163,12 +1163,16 @@ static int ath11k_ahb_probe(struct platf
|
||||
goto err_core_free;
|
||||
}
|
||||
|
||||
- ab->mem_ce = ab->mem;
|
||||
-
|
||||
ret = ath11k_core_pre_init(ab);
|
||||
if (ret)
|
||||
goto err_core_free;
|
||||
|
||||
+ ret = ath11k_ahb_setup_resources(ab);
|
||||
+ if (ret)
|
||||
+ goto err_core_free;
|
||||
+
|
||||
+ ab->mem_ce = ab->mem;
|
||||
+
|
||||
if (ab->hw_params.ce_remap) {
|
||||
const struct ce_remap *ce_remap = ab->hw_params.ce_remap;
|
||||
/* ce register space is moved out of wcss unlike ipq8074 or ipq6018
|
||||
@@ -1183,10 +1187,6 @@ static int ath11k_ahb_probe(struct platf
|
||||
}
|
||||
}
|
||||
|
||||
- ret = ath11k_ahb_setup_resources(ab);
|
||||
- if (ret)
|
||||
- goto err_core_free;
|
||||
-
|
||||
ret = ath11k_ahb_fw_resources_init(ab);
|
||||
if (ret)
|
||||
goto err_core_free;
|
||||
-73
@@ -1,73 +0,0 @@
|
||||
From cf8f3d4deb02a8fdc806c46d4112b69868544697 Mon Sep 17 00:00:00 2001
|
||||
From: Tamizh Chelvam Raja <quic_tamizhr@quicinc.com>
|
||||
Date: Wed, 15 Feb 2023 20:31:36 +0200
|
||||
Subject: [PATCH] wifi: ath11k: Set ext passive scan flag to adjust passive
|
||||
scan start time
|
||||
|
||||
Set the WMI_SCAN_FLAG_EXT_PASSIVE_SCAN_START_TIME_ENHANCE flag
|
||||
while sending the scan command. If this flag is enabled when the
|
||||
incoming scan request comes with a strict start time and its duration
|
||||
overlaps with next TBTT, then target adjust the start time accordingly
|
||||
for passive scan. Target supporting this feature will advertise
|
||||
WMI_TLV_SERVICE_PASSIVE_SCAN_START_TIME_ENHANCE.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01467-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Tamizh Chelvam Raja <quic_tamizhr@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221222131720.11368-1-quic_tamizhr@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/wmi.c | 8 ++++++++
|
||||
drivers/net/wireless/ath/ath11k/wmi.h | 3 +++
|
||||
2 files changed, 11 insertions(+)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -2068,6 +2068,12 @@ void ath11k_wmi_start_scan_init(struct a
|
||||
WMI_SCAN_EVENT_FOREIGN_CHAN |
|
||||
WMI_SCAN_EVENT_DEQUEUED;
|
||||
arg->scan_flags |= WMI_SCAN_CHAN_STAT_EVENT;
|
||||
+
|
||||
+ if (test_bit(WMI_TLV_SERVICE_PASSIVE_SCAN_START_TIME_ENHANCE,
|
||||
+ ar->ab->wmi_ab.svc_map))
|
||||
+ arg->scan_ctrl_flags_ext |=
|
||||
+ WMI_SCAN_FLAG_EXT_PASSIVE_SCAN_START_TIME_ENHANCE;
|
||||
+
|
||||
arg->num_bssid = 1;
|
||||
|
||||
/* fill bssid_list[0] with 0xff, otherwise bssid and RA will be
|
||||
@@ -2149,6 +2155,8 @@ ath11k_wmi_copy_scan_event_cntrl_flags(s
|
||||
/* for adaptive scan mode using 3 bits (21 - 23 bits) */
|
||||
WMI_SCAN_SET_DWELL_MODE(cmd->scan_ctrl_flags,
|
||||
param->adaptive_dwell_time_mode);
|
||||
+
|
||||
+ cmd->scan_ctrl_flags_ext = param->scan_ctrl_flags_ext;
|
||||
}
|
||||
|
||||
int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
@@ -2093,6 +2093,7 @@ enum wmi_tlv_service {
|
||||
WMI_TLV_SERVICE_EXT2_MSG = 220,
|
||||
WMI_TLV_SERVICE_PEER_POWER_SAVE_DURATION_SUPPORT = 246,
|
||||
WMI_TLV_SERVICE_SRG_SRP_SPATIAL_REUSE_SUPPORT = 249,
|
||||
+ WMI_TLV_SERVICE_PASSIVE_SCAN_START_TIME_ENHANCE = 263,
|
||||
|
||||
/* The second 128 bits */
|
||||
WMI_MAX_EXT_SERVICE = 256,
|
||||
@@ -3223,6 +3224,7 @@ struct wmi_start_scan_cmd {
|
||||
|
||||
#define WMI_SCAN_DWELL_MODE_MASK 0x00E00000
|
||||
#define WMI_SCAN_DWELL_MODE_SHIFT 21
|
||||
+#define WMI_SCAN_FLAG_EXT_PASSIVE_SCAN_START_TIME_ENHANCE 0x00000800
|
||||
|
||||
enum {
|
||||
WMI_SCAN_DWELL_MODE_DEFAULT = 0,
|
||||
@@ -3270,6 +3272,7 @@ struct scan_req_params {
|
||||
};
|
||||
u32 scan_events;
|
||||
};
|
||||
+ u32 scan_ctrl_flags_ext;
|
||||
u32 dwell_time_active;
|
||||
u32 dwell_time_active_2g;
|
||||
u32 dwell_time_passive;
|
||||
-27
@@ -1,27 +0,0 @@
|
||||
From 342fcde9d91460f01f65707e16368a1571271a3a Mon Sep 17 00:00:00 2001
|
||||
From: Yang Yingliang <yangyingliang@huawei.com>
|
||||
Date: Fri, 17 Feb 2023 11:00:31 +0800
|
||||
Subject: [PATCH] wifi: ath11k: fix return value check in ath11k_ahb_probe()
|
||||
|
||||
ioremap() returns NULL pointer not PTR_ERR() when it fails,
|
||||
so replace the IS_ERR() check with NULL pointer check.
|
||||
|
||||
Fixes: b42b3678c91f ("wifi: ath11k: remap ce register space for IPQ5018")
|
||||
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230217030031.4021289-1-yangyingliang@huawei.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/ahb.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||
@@ -1180,7 +1180,7 @@ static int ath11k_ahb_probe(struct platf
|
||||
* to a new space for accessing them.
|
||||
*/
|
||||
ab->mem_ce = ioremap(ce_remap->base, ce_remap->size);
|
||||
- if (IS_ERR(ab->mem_ce)) {
|
||||
+ if (!ab->mem_ce) {
|
||||
dev_err(&pdev->dev, "ce ioremap error\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_core_free;
|
||||
-43
@@ -1,43 +0,0 @@
|
||||
From 7c15430822e71e90203d87e6d0cfe83fa058b0dc Mon Sep 17 00:00:00 2001
|
||||
From: Len Brown <len.brown@intel.com>
|
||||
Date: Wed, 1 Feb 2023 12:32:01 -0600
|
||||
Subject: [PATCH] wifi: ath11k: allow system suspend to survive ath11k
|
||||
|
||||
When ath11k runs into internal errors upon suspend,
|
||||
it returns an error code to pci_pm_suspend, which
|
||||
aborts the entire system suspend.
|
||||
|
||||
The driver should not abort system suspend, but should
|
||||
keep its internal errors to itself, and allow the system
|
||||
to suspend. Otherwise, a user can suspend a laptop
|
||||
by closing the lid and sealing it into a case, assuming
|
||||
that is will suspend, rather than heating up and draining
|
||||
the battery when in transit.
|
||||
|
||||
In practice, the ath11k device seems to have plenty of transient
|
||||
errors, and subsequent suspend cycles after this failure
|
||||
often succeed.
|
||||
|
||||
https://bugzilla.kernel.org/show_bug.cgi?id=216968
|
||||
|
||||
Fixes: d1b0c33850d29 ("ath11k: implement suspend for QCA6390 PCI devices")
|
||||
|
||||
Signed-off-by: Len Brown <len.brown@intel.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20230201183201.14431-1-len.brown@intel.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/pci.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||
@@ -1004,7 +1004,7 @@ static __maybe_unused int ath11k_pci_pm_
|
||||
if (ret)
|
||||
ath11k_warn(ab, "failed to resume core: %d\n", ret);
|
||||
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(ath11k_pci_pm_ops,
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
From a96f10422e74cde27c100b321b127ec32ae75747 Mon Sep 17 00:00:00 2001
|
||||
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Date: Fri, 24 Feb 2023 12:28:03 +0200
|
||||
Subject: [PATCH] wifi: ath11k: modify accessor macros to match index size
|
||||
|
||||
HE PHY is only 11 bytes, therefore it should be using byte indexes
|
||||
instead of dword. Change corresponding macros to reflect this.
|
||||
|
||||
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/1666128501-12364-2-git-send-email-quic_msinada@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/wmi.h | 24 +++++++++++++-----------
|
||||
1 file changed, 13 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
@@ -2859,30 +2859,32 @@ struct rx_reorder_queue_remove_params {
|
||||
#define WMI_VDEV_PARAM_TXBF_SU_TX_BFER BIT(2)
|
||||
#define WMI_VDEV_PARAM_TXBF_MU_TX_BFER BIT(3)
|
||||
|
||||
-#define HECAP_PHYDWORD_0 0
|
||||
-#define HECAP_PHYDWORD_1 1
|
||||
-#define HECAP_PHYDWORD_2 2
|
||||
+#define HE_PHYCAP_BYTE_0 0
|
||||
+#define HE_PHYCAP_BYTE_1 1
|
||||
+#define HE_PHYCAP_BYTE_2 2
|
||||
+#define HE_PHYCAP_BYTE_3 3
|
||||
+#define HE_PHYCAP_BYTE_4 4
|
||||
|
||||
-#define HECAP_PHY_SU_BFER BIT(31)
|
||||
+#define HECAP_PHY_SU_BFER BIT(7)
|
||||
#define HECAP_PHY_SU_BFEE BIT(0)
|
||||
#define HECAP_PHY_MU_BFER BIT(1)
|
||||
-#define HECAP_PHY_UL_MUMIMO BIT(22)
|
||||
-#define HECAP_PHY_UL_MUOFDMA BIT(23)
|
||||
+#define HECAP_PHY_UL_MUMIMO BIT(6)
|
||||
+#define HECAP_PHY_UL_MUOFDMA BIT(7)
|
||||
|
||||
#define HECAP_PHY_SUBFMR_GET(hecap_phy) \
|
||||
- FIELD_GET(HECAP_PHY_SU_BFER, hecap_phy[HECAP_PHYDWORD_0])
|
||||
+ FIELD_GET(HECAP_PHY_SU_BFER, hecap_phy[HE_PHYCAP_BYTE_3])
|
||||
|
||||
#define HECAP_PHY_SUBFME_GET(hecap_phy) \
|
||||
- FIELD_GET(HECAP_PHY_SU_BFEE, hecap_phy[HECAP_PHYDWORD_1])
|
||||
+ FIELD_GET(HECAP_PHY_SU_BFEE, hecap_phy[HE_PHYCAP_BYTE_4])
|
||||
|
||||
#define HECAP_PHY_MUBFMR_GET(hecap_phy) \
|
||||
- FIELD_GET(HECAP_PHY_MU_BFER, hecap_phy[HECAP_PHYDWORD_1])
|
||||
+ FIELD_GET(HECAP_PHY_MU_BFER, hecap_phy[HE_PHYCAP_BYTE_4])
|
||||
|
||||
#define HECAP_PHY_ULMUMIMO_GET(hecap_phy) \
|
||||
- FIELD_GET(HECAP_PHY_UL_MUMIMO, hecap_phy[HECAP_PHYDWORD_0])
|
||||
+ FIELD_GET(HECAP_PHY_UL_MUMIMO, hecap_phy[HE_PHYCAP_BYTE_2])
|
||||
|
||||
#define HECAP_PHY_ULOFDMA_GET(hecap_phy) \
|
||||
- FIELD_GET(HECAP_PHY_UL_MUOFDMA, hecap_phy[HECAP_PHYDWORD_0])
|
||||
+ FIELD_GET(HECAP_PHY_UL_MUOFDMA, hecap_phy[HE_PHYCAP_BYTE_2])
|
||||
|
||||
#define HE_MODE_SU_TX_BFEE BIT(0)
|
||||
#define HE_MODE_SU_TX_BFER BIT(1)
|
||||
-300
@@ -1,300 +0,0 @@
|
||||
From 38dfe775d0abf511341f37c1cb77b919a3ad410b Mon Sep 17 00:00:00 2001
|
||||
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Date: Fri, 24 Feb 2023 12:28:04 +0200
|
||||
Subject: [PATCH] wifi: ath11k: push MU-MIMO params from hostapd to hardware
|
||||
|
||||
In the previous behaviour only HE IE in management frames are changed
|
||||
regarding MU-MIMO configurations and not in hardware. Adding push of
|
||||
MU-MIMO configurations to the hardware as well.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Co-developed-by: Anilkumar Kolli <quic_akolli@quicinc.com>
|
||||
Signed-off-by: Anilkumar Kolli <quic_akolli@quicinc.com>
|
||||
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 200 ++++++++++++++++----------
|
||||
drivers/net/wireless/ath/ath11k/wmi.h | 3 +
|
||||
2 files changed, 130 insertions(+), 73 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -2696,6 +2696,117 @@ static int ath11k_setup_peer_smps(struct
|
||||
ath11k_smps_map[smps]);
|
||||
}
|
||||
|
||||
+static bool ath11k_mac_set_he_txbf_conf(struct ath11k_vif *arvif)
|
||||
+{
|
||||
+ struct ath11k *ar = arvif->ar;
|
||||
+ u32 param, value;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!arvif->vif->bss_conf.he_support)
|
||||
+ return true;
|
||||
+
|
||||
+ param = WMI_VDEV_PARAM_SET_HEMU_MODE;
|
||||
+ value = 0;
|
||||
+ if (arvif->vif->bss_conf.he_su_beamformer) {
|
||||
+ value |= FIELD_PREP(HE_MODE_SU_TX_BFER, HE_SU_BFER_ENABLE);
|
||||
+ if (arvif->vif->bss_conf.he_mu_beamformer &&
|
||||
+ arvif->vdev_type == WMI_VDEV_TYPE_AP)
|
||||
+ value |= FIELD_PREP(HE_MODE_MU_TX_BFER, HE_MU_BFER_ENABLE);
|
||||
+ }
|
||||
+
|
||||
+ if (arvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
|
||||
+ value |= FIELD_PREP(HE_MODE_DL_OFDMA, HE_DL_MUOFDMA_ENABLE) |
|
||||
+ FIELD_PREP(HE_MODE_UL_OFDMA, HE_UL_MUOFDMA_ENABLE);
|
||||
+
|
||||
+ if (arvif->vif->bss_conf.he_full_ul_mumimo)
|
||||
+ value |= FIELD_PREP(HE_MODE_UL_MUMIMO, HE_UL_MUMIMO_ENABLE);
|
||||
+
|
||||
+ if (arvif->vif->bss_conf.he_su_beamformee)
|
||||
+ value |= FIELD_PREP(HE_MODE_SU_TX_BFEE, HE_SU_BFEE_ENABLE);
|
||||
+ }
|
||||
+
|
||||
+ ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, value);
|
||||
+ if (ret) {
|
||||
+ ath11k_warn(ar->ab, "failed to set vdev %d HE MU mode: %d\n",
|
||||
+ arvif->vdev_id, ret);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ param = WMI_VDEV_PARAM_SET_HE_SOUNDING_MODE;
|
||||
+ value = FIELD_PREP(HE_VHT_SOUNDING_MODE, HE_VHT_SOUNDING_MODE_ENABLE) |
|
||||
+ FIELD_PREP(HE_TRIG_NONTRIG_SOUNDING_MODE,
|
||||
+ HE_TRIG_NONTRIG_SOUNDING_MODE_ENABLE);
|
||||
+ ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||
+ param, value);
|
||||
+ if (ret) {
|
||||
+ ath11k_warn(ar->ab, "failed to set vdev %d sounding mode: %d\n",
|
||||
+ arvif->vdev_id, ret);
|
||||
+ return false;
|
||||
+ }
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+static bool ath11k_mac_vif_recalc_sta_he_txbf(struct ath11k *ar,
|
||||
+ struct ieee80211_vif *vif,
|
||||
+ struct ieee80211_sta_he_cap *he_cap)
|
||||
+{
|
||||
+ struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||
+ struct ieee80211_he_cap_elem he_cap_elem = {0};
|
||||
+ struct ieee80211_sta_he_cap *cap_band = NULL;
|
||||
+ struct cfg80211_chan_def def;
|
||||
+ u32 param = WMI_VDEV_PARAM_SET_HEMU_MODE;
|
||||
+ u32 hemode = 0;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!vif->bss_conf.he_support)
|
||||
+ return true;
|
||||
+
|
||||
+ if (vif->type != NL80211_IFTYPE_STATION)
|
||||
+ return false;
|
||||
+
|
||||
+ if (WARN_ON(ath11k_mac_vif_chan(vif, &def)))
|
||||
+ return false;
|
||||
+
|
||||
+ if (def.chan->band == NL80211_BAND_2GHZ)
|
||||
+ cap_band = &ar->mac.iftype[NL80211_BAND_2GHZ][vif->type].he_cap;
|
||||
+ else
|
||||
+ cap_band = &ar->mac.iftype[NL80211_BAND_5GHZ][vif->type].he_cap;
|
||||
+
|
||||
+ memcpy(&he_cap_elem, &cap_band->he_cap_elem, sizeof(he_cap_elem));
|
||||
+
|
||||
+ if (HECAP_PHY_SUBFME_GET(he_cap_elem.phy_cap_info)) {
|
||||
+ if (HECAP_PHY_SUBFMR_GET(he_cap->he_cap_elem.phy_cap_info))
|
||||
+ hemode |= FIELD_PREP(HE_MODE_SU_TX_BFEE, HE_SU_BFEE_ENABLE);
|
||||
+ if (HECAP_PHY_MUBFMR_GET(he_cap->he_cap_elem.phy_cap_info))
|
||||
+ hemode |= FIELD_PREP(HE_MODE_MU_TX_BFEE, HE_MU_BFEE_ENABLE);
|
||||
+ }
|
||||
+
|
||||
+ if (vif->type != NL80211_IFTYPE_MESH_POINT) {
|
||||
+ hemode |= FIELD_PREP(HE_MODE_DL_OFDMA, HE_DL_MUOFDMA_ENABLE) |
|
||||
+ FIELD_PREP(HE_MODE_UL_OFDMA, HE_UL_MUOFDMA_ENABLE);
|
||||
+
|
||||
+ if (HECAP_PHY_ULMUMIMO_GET(he_cap_elem.phy_cap_info))
|
||||
+ if (HECAP_PHY_ULMUMIMO_GET(he_cap->he_cap_elem.phy_cap_info))
|
||||
+ hemode |= FIELD_PREP(HE_MODE_UL_MUMIMO,
|
||||
+ HE_UL_MUMIMO_ENABLE);
|
||||
+
|
||||
+ if (FIELD_GET(HE_MODE_MU_TX_BFEE, hemode))
|
||||
+ hemode |= FIELD_PREP(HE_MODE_SU_TX_BFEE, HE_SU_BFEE_ENABLE);
|
||||
+
|
||||
+ if (FIELD_GET(HE_MODE_MU_TX_BFER, hemode))
|
||||
+ hemode |= FIELD_PREP(HE_MODE_SU_TX_BFER, HE_SU_BFER_ENABLE);
|
||||
+ }
|
||||
+
|
||||
+ ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, hemode);
|
||||
+ if (ret) {
|
||||
+ ath11k_warn(ar->ab, "failed to submit vdev param txbf 0x%x: %d\n",
|
||||
+ hemode, ret);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
static void ath11k_bss_assoc(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_bss_conf *bss_conf)
|
||||
@@ -2706,6 +2817,7 @@ static void ath11k_bss_assoc(struct ieee
|
||||
struct ieee80211_sta *ap_sta;
|
||||
struct ath11k_peer *peer;
|
||||
bool is_auth = false;
|
||||
+ struct ieee80211_sta_he_cap he_cap;
|
||||
int ret;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
@@ -2723,6 +2835,9 @@ static void ath11k_bss_assoc(struct ieee
|
||||
return;
|
||||
}
|
||||
|
||||
+ /* he_cap here is updated at assoc success for sta mode only */
|
||||
+ he_cap = ap_sta->deflink.he_cap;
|
||||
+
|
||||
ath11k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg, false);
|
||||
|
||||
rcu_read_unlock();
|
||||
@@ -2750,6 +2865,12 @@ static void ath11k_bss_assoc(struct ieee
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (!ath11k_mac_vif_recalc_sta_he_txbf(ar, vif, &he_cap)) {
|
||||
+ ath11k_warn(ar->ab, "failed to recalc he txbf for vdev %i on bss %pM\n",
|
||||
+ arvif->vdev_id, bss_conf->bssid);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
WARN_ON(arvif->is_up);
|
||||
|
||||
arvif->aid = vif->cfg.aid;
|
||||
@@ -3199,6 +3320,8 @@ static void ath11k_mac_op_bss_info_chang
|
||||
ether_addr_copy(arvif->bssid, info->bssid);
|
||||
|
||||
if (changed & BSS_CHANGED_BEACON_ENABLED) {
|
||||
+ if (info->enable_beacon)
|
||||
+ ath11k_mac_set_he_txbf_conf(arvif);
|
||||
ath11k_control_beaconing(arvif, info);
|
||||
|
||||
if (arvif->is_up && vif->bss_conf.he_support &&
|
||||
@@ -5388,6 +5511,10 @@ static int ath11k_mac_copy_he_cap(struct
|
||||
|
||||
he_cap_elem->mac_cap_info[1] &=
|
||||
IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK;
|
||||
+ he_cap_elem->phy_cap_info[0] &=
|
||||
+ ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
|
||||
+ he_cap_elem->phy_cap_info[0] &=
|
||||
+ ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
|
||||
|
||||
he_cap_elem->phy_cap_info[5] &=
|
||||
~IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK;
|
||||
@@ -6030,69 +6157,6 @@ ath11k_mac_setup_vdev_create_params(stru
|
||||
}
|
||||
}
|
||||
|
||||
-static u32
|
||||
-ath11k_mac_prepare_he_mode(struct ath11k_pdev *pdev, u32 viftype)
|
||||
-{
|
||||
- struct ath11k_pdev_cap *pdev_cap = &pdev->cap;
|
||||
- struct ath11k_band_cap *cap_band = NULL;
|
||||
- u32 *hecap_phy_ptr = NULL;
|
||||
- u32 hemode = 0;
|
||||
-
|
||||
- if (pdev->cap.supported_bands & WMI_HOST_WLAN_2G_CAP)
|
||||
- cap_band = &pdev_cap->band[NL80211_BAND_2GHZ];
|
||||
- else
|
||||
- cap_band = &pdev_cap->band[NL80211_BAND_5GHZ];
|
||||
-
|
||||
- hecap_phy_ptr = &cap_band->he_cap_phy_info[0];
|
||||
-
|
||||
- hemode = FIELD_PREP(HE_MODE_SU_TX_BFEE, HE_SU_BFEE_ENABLE) |
|
||||
- FIELD_PREP(HE_MODE_SU_TX_BFER, HECAP_PHY_SUBFMR_GET(hecap_phy_ptr)) |
|
||||
- FIELD_PREP(HE_MODE_UL_MUMIMO, HECAP_PHY_ULMUMIMO_GET(hecap_phy_ptr));
|
||||
-
|
||||
- /* TODO WDS and other modes */
|
||||
- if (viftype == NL80211_IFTYPE_AP) {
|
||||
- hemode |= FIELD_PREP(HE_MODE_MU_TX_BFER,
|
||||
- HECAP_PHY_MUBFMR_GET(hecap_phy_ptr)) |
|
||||
- FIELD_PREP(HE_MODE_DL_OFDMA, HE_DL_MUOFDMA_ENABLE) |
|
||||
- FIELD_PREP(HE_MODE_UL_OFDMA, HE_UL_MUOFDMA_ENABLE);
|
||||
- } else {
|
||||
- hemode |= FIELD_PREP(HE_MODE_MU_TX_BFEE, HE_MU_BFEE_ENABLE);
|
||||
- }
|
||||
-
|
||||
- return hemode;
|
||||
-}
|
||||
-
|
||||
-static int ath11k_set_he_mu_sounding_mode(struct ath11k *ar,
|
||||
- struct ath11k_vif *arvif)
|
||||
-{
|
||||
- u32 param_id, param_value;
|
||||
- struct ath11k_base *ab = ar->ab;
|
||||
- int ret = 0;
|
||||
-
|
||||
- param_id = WMI_VDEV_PARAM_SET_HEMU_MODE;
|
||||
- param_value = ath11k_mac_prepare_he_mode(ar->pdev, arvif->vif->type);
|
||||
- ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||
- param_id, param_value);
|
||||
- if (ret) {
|
||||
- ath11k_warn(ab, "failed to set vdev %d HE MU mode: %d param_value %x\n",
|
||||
- arvif->vdev_id, ret, param_value);
|
||||
- return ret;
|
||||
- }
|
||||
- param_id = WMI_VDEV_PARAM_SET_HE_SOUNDING_MODE;
|
||||
- param_value =
|
||||
- FIELD_PREP(HE_VHT_SOUNDING_MODE, HE_VHT_SOUNDING_MODE_ENABLE) |
|
||||
- FIELD_PREP(HE_TRIG_NONTRIG_SOUNDING_MODE,
|
||||
- HE_TRIG_NONTRIG_SOUNDING_MODE_ENABLE);
|
||||
- ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||
- param_id, param_value);
|
||||
- if (ret) {
|
||||
- ath11k_warn(ab, "failed to set vdev %d HE MU mode: %d\n",
|
||||
- arvif->vdev_id, ret);
|
||||
- return ret;
|
||||
- }
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
static void ath11k_mac_op_update_vif_offload(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
@@ -6761,7 +6825,6 @@ ath11k_mac_vdev_start_restart(struct ath
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
struct wmi_vdev_start_req_arg arg = {};
|
||||
const struct cfg80211_chan_def *chandef = &ctx->def;
|
||||
- int he_support = arvif->vif->bss_conf.he_support;
|
||||
int ret = 0;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
@@ -6802,15 +6865,6 @@ ath11k_mac_vdev_start_restart(struct ath
|
||||
spin_lock_bh(&ab->base_lock);
|
||||
arg.regdomain = ar->ab->dfs_region;
|
||||
spin_unlock_bh(&ab->base_lock);
|
||||
-
|
||||
- if (he_support) {
|
||||
- ret = ath11k_set_he_mu_sounding_mode(ar, arvif);
|
||||
- if (ret) {
|
||||
- ath11k_warn(ar->ab, "failed to set he mode vdev %i\n",
|
||||
- arg.vdev_id);
|
||||
- return ret;
|
||||
- }
|
||||
- }
|
||||
}
|
||||
|
||||
arg.channel.passive |= !!(chandef->chan->flags & IEEE80211_CHAN_NO_IR);
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
@@ -2897,8 +2897,11 @@ struct rx_reorder_queue_remove_params {
|
||||
#define HE_DL_MUOFDMA_ENABLE 1
|
||||
#define HE_UL_MUOFDMA_ENABLE 1
|
||||
#define HE_DL_MUMIMO_ENABLE 1
|
||||
+#define HE_UL_MUMIMO_ENABLE 1
|
||||
#define HE_MU_BFEE_ENABLE 1
|
||||
#define HE_SU_BFEE_ENABLE 1
|
||||
+#define HE_MU_BFER_ENABLE 1
|
||||
+#define HE_SU_BFER_ENABLE 1
|
||||
|
||||
#define HE_VHT_SOUNDING_MODE_ENABLE 1
|
||||
#define HE_SU_MU_SOUNDING_MODE_ENABLE 1
|
||||
-67
@@ -1,67 +0,0 @@
|
||||
From 8077c1bbbc28e527fb29143c46f32c6a9d6cadf0 Mon Sep 17 00:00:00 2001
|
||||
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Date: Fri, 24 Feb 2023 12:28:04 +0200
|
||||
Subject: [PATCH] wifi: ath11k: move HE MCS mapper to a separate function
|
||||
|
||||
Move HE MCS mapper to a separate function and call new function
|
||||
in ath11k_mac_copy_he_cap().
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/1666128501-12364-4-git-send-email-quic_msinada@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 34 +++++++++++++++++----------
|
||||
1 file changed, 22 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -5479,6 +5479,27 @@ static __le16 ath11k_mac_setup_he_6ghz_c
|
||||
return cpu_to_le16(bcap->he_6ghz_capa);
|
||||
}
|
||||
|
||||
+static void ath11k_mac_set_hemcsmap(struct ath11k *ar,
|
||||
+ struct ath11k_pdev_cap *cap,
|
||||
+ struct ieee80211_sta_he_cap *he_cap,
|
||||
+ int band)
|
||||
+{
|
||||
+ struct ath11k_band_cap *band_cap = &cap->band[band];
|
||||
+
|
||||
+ he_cap->he_mcs_nss_supp.rx_mcs_80 =
|
||||
+ cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||
+ he_cap->he_mcs_nss_supp.tx_mcs_80 =
|
||||
+ cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||
+ he_cap->he_mcs_nss_supp.rx_mcs_160 =
|
||||
+ cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+ he_cap->he_mcs_nss_supp.tx_mcs_160 =
|
||||
+ cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+ he_cap->he_mcs_nss_supp.rx_mcs_80p80 =
|
||||
+ cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+ he_cap->he_mcs_nss_supp.tx_mcs_80p80 =
|
||||
+ cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+}
|
||||
+
|
||||
static int ath11k_mac_copy_he_cap(struct ath11k *ar,
|
||||
struct ath11k_pdev_cap *cap,
|
||||
struct ieee80211_sband_iftype_data *data,
|
||||
@@ -5540,18 +5561,7 @@ static int ath11k_mac_copy_he_cap(struct
|
||||
break;
|
||||
}
|
||||
|
||||
- he_cap->he_mcs_nss_supp.rx_mcs_80 =
|
||||
- cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||
- he_cap->he_mcs_nss_supp.tx_mcs_80 =
|
||||
- cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||
- he_cap->he_mcs_nss_supp.rx_mcs_160 =
|
||||
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
- he_cap->he_mcs_nss_supp.tx_mcs_160 =
|
||||
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
- he_cap->he_mcs_nss_supp.rx_mcs_80p80 =
|
||||
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
- he_cap->he_mcs_nss_supp.tx_mcs_80p80 =
|
||||
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+ ath11k_mac_set_hemcsmap(ar, cap, he_cap, band);
|
||||
|
||||
memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
|
||||
if (he_cap_elem->phy_cap_info[6] &
|
||||
-64
@@ -1,64 +0,0 @@
|
||||
From ebf82988f844dd98e6b007cffcc5e95986056995 Mon Sep 17 00:00:00 2001
|
||||
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Date: Fri, 24 Feb 2023 12:28:04 +0200
|
||||
Subject: [PATCH] wifi: ath11k: generate rx and tx mcs maps for supported HE
|
||||
mcs
|
||||
|
||||
Generate rx and tx mcs maps in ath11k_mac_set_hemcsmap() and set them
|
||||
in supported mcs/nss for HE capabilities.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/1666128501-12364-5-git-send-email-quic_msinada@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 30 ++++++++++++++++++++-------
|
||||
1 file changed, 23 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -5484,20 +5484,36 @@ static void ath11k_mac_set_hemcsmap(stru
|
||||
struct ieee80211_sta_he_cap *he_cap,
|
||||
int band)
|
||||
{
|
||||
- struct ath11k_band_cap *band_cap = &cap->band[band];
|
||||
+ u16 txmcs_map, rxmcs_map;
|
||||
+ u32 i;
|
||||
|
||||
+ rxmcs_map = 0;
|
||||
+ txmcs_map = 0;
|
||||
+ for (i = 0; i < 8; i++) {
|
||||
+ if (i < ar->num_tx_chains &&
|
||||
+ (ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||||
+ txmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||||
+ else
|
||||
+ txmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||||
+
|
||||
+ if (i < ar->num_rx_chains &&
|
||||
+ (ar->cfg_rx_chainmask >> cap->tx_chain_mask_shift) & BIT(i))
|
||||
+ rxmcs_map |= IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2);
|
||||
+ else
|
||||
+ rxmcs_map |= IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2);
|
||||
+ }
|
||||
he_cap->he_mcs_nss_supp.rx_mcs_80 =
|
||||
- cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||
+ cpu_to_le16(rxmcs_map & 0xffff);
|
||||
he_cap->he_mcs_nss_supp.tx_mcs_80 =
|
||||
- cpu_to_le16(band_cap->he_mcs & 0xffff);
|
||||
+ cpu_to_le16(txmcs_map & 0xffff);
|
||||
he_cap->he_mcs_nss_supp.rx_mcs_160 =
|
||||
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+ cpu_to_le16(rxmcs_map & 0xffff);
|
||||
he_cap->he_mcs_nss_supp.tx_mcs_160 =
|
||||
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+ cpu_to_le16(txmcs_map & 0xffff);
|
||||
he_cap->he_mcs_nss_supp.rx_mcs_80p80 =
|
||||
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+ cpu_to_le16(rxmcs_map & 0xffff);
|
||||
he_cap->he_mcs_nss_supp.tx_mcs_80p80 =
|
||||
- cpu_to_le16((band_cap->he_mcs >> 16) & 0xffff);
|
||||
+ cpu_to_le16(txmcs_map & 0xffff);
|
||||
}
|
||||
|
||||
static int ath11k_mac_copy_he_cap(struct ath11k *ar,
|
||||
-150
@@ -1,150 +0,0 @@
|
||||
From 01c6c9fccbd51c1d9eab0f5794b0271b026178df Mon Sep 17 00:00:00 2001
|
||||
From: Abinaya Kalaiselvan <quic_akalaise@quicinc.com>
|
||||
Date: Mon, 19 Dec 2022 11:08:44 +0530
|
||||
Subject: [PATCH] wifi: ath11k: Add tx ack signal support for management
|
||||
packets
|
||||
|
||||
Add support to notify tx ack signal values for management
|
||||
packets to userspace through nl80211 interface.
|
||||
|
||||
Advertise NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT flag
|
||||
to enable this feature and it will be used for data
|
||||
packets as well.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Abinaya Kalaiselvan <quic_akalaise@quicinc.com>
|
||||
Signed-off-by: Maharaja Kennadyrajan <quic_mkenna@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20221219053844.4084486-1-quic_mkenna@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/hw.c | 1 +
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 5 +++++
|
||||
drivers/net/wireless/ath/ath11k/wmi.c | 27 ++++++++++++++++-----------
|
||||
drivers/net/wireless/ath/ath11k/wmi.h | 3 +++
|
||||
4 files changed, 25 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hw.c
|
||||
@@ -201,6 +201,7 @@ static void ath11k_init_wmi_config_ipq80
|
||||
config->twt_ap_pdev_count = ab->num_radios;
|
||||
config->twt_ap_sta_count = 1000;
|
||||
config->flag1 |= WMI_RSRC_CFG_FLAG1_BSS_CHANNEL_INFO_64;
|
||||
+ config->flag1 |= WMI_RSRC_CFG_FLAG1_ACK_RSSI;
|
||||
}
|
||||
|
||||
static int ath11k_hw_mac_id_to_pdev_id_ipq8074(struct ath11k_hw_params *hw,
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -9186,6 +9186,11 @@ static int __ath11k_mac_register(struct
|
||||
goto err_free_if_combs;
|
||||
}
|
||||
|
||||
+ if (test_bit(WMI_TLV_SERVICE_TX_DATA_MGMT_ACK_RSSI,
|
||||
+ ar->ab->wmi_ab.svc_map))
|
||||
+ wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
+ NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT);
|
||||
+
|
||||
ar->hw->queues = ATH11K_HW_MAX_QUEUES;
|
||||
ar->hw->wiphy->tx_queue_len = ATH11K_QUEUE_LEN;
|
||||
ar->hw->offchannel_tx_hw_queue = ATH11K_HW_MAX_QUEUES - 1;
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -5229,8 +5229,8 @@ static int ath11k_pull_mgmt_rx_params_tl
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int wmi_process_mgmt_tx_comp(struct ath11k *ar, u32 desc_id,
|
||||
- u32 status)
|
||||
+static int wmi_process_mgmt_tx_comp(struct ath11k *ar,
|
||||
+ struct wmi_mgmt_tx_compl_event *tx_compl_param)
|
||||
{
|
||||
struct sk_buff *msdu;
|
||||
struct ieee80211_tx_info *info;
|
||||
@@ -5238,24 +5238,29 @@ static int wmi_process_mgmt_tx_comp(stru
|
||||
int num_mgmt;
|
||||
|
||||
spin_lock_bh(&ar->txmgmt_idr_lock);
|
||||
- msdu = idr_find(&ar->txmgmt_idr, desc_id);
|
||||
+ msdu = idr_find(&ar->txmgmt_idr, tx_compl_param->desc_id);
|
||||
|
||||
if (!msdu) {
|
||||
ath11k_warn(ar->ab, "received mgmt tx compl for invalid msdu_id: %d\n",
|
||||
- desc_id);
|
||||
+ tx_compl_param->desc_id);
|
||||
spin_unlock_bh(&ar->txmgmt_idr_lock);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
- idr_remove(&ar->txmgmt_idr, desc_id);
|
||||
+ idr_remove(&ar->txmgmt_idr, tx_compl_param->desc_id);
|
||||
spin_unlock_bh(&ar->txmgmt_idr_lock);
|
||||
|
||||
skb_cb = ATH11K_SKB_CB(msdu);
|
||||
dma_unmap_single(ar->ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
|
||||
|
||||
info = IEEE80211_SKB_CB(msdu);
|
||||
- if ((!(info->flags & IEEE80211_TX_CTL_NO_ACK)) && !status)
|
||||
+ if ((!(info->flags & IEEE80211_TX_CTL_NO_ACK)) &&
|
||||
+ !tx_compl_param->status) {
|
||||
info->flags |= IEEE80211_TX_STAT_ACK;
|
||||
+ if (test_bit(WMI_TLV_SERVICE_TX_DATA_MGMT_ACK_RSSI,
|
||||
+ ar->ab->wmi_ab.svc_map))
|
||||
+ info->status.ack_signal = tx_compl_param->ack_rssi;
|
||||
+ }
|
||||
|
||||
ieee80211_tx_status_irqsafe(ar->hw, msdu);
|
||||
|
||||
@@ -5267,7 +5272,7 @@ static int wmi_process_mgmt_tx_comp(stru
|
||||
|
||||
ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
|
||||
"wmi mgmt tx comp pending %d desc id %d\n",
|
||||
- num_mgmt, desc_id);
|
||||
+ num_mgmt, tx_compl_param->desc_id);
|
||||
|
||||
if (!num_mgmt)
|
||||
wake_up(&ar->txmgmt_empty_waitq);
|
||||
@@ -5300,6 +5305,7 @@ static int ath11k_pull_mgmt_tx_compl_par
|
||||
param->pdev_id = ev->pdev_id;
|
||||
param->desc_id = ev->desc_id;
|
||||
param->status = ev->status;
|
||||
+ param->ack_rssi = ev->ack_rssi;
|
||||
|
||||
kfree(tb);
|
||||
return 0;
|
||||
@@ -7070,13 +7076,12 @@ static void ath11k_mgmt_tx_compl_event(s
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- wmi_process_mgmt_tx_comp(ar, tx_compl_param.desc_id,
|
||||
- tx_compl_param.status);
|
||||
+ wmi_process_mgmt_tx_comp(ar, &tx_compl_param);
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_MGMT,
|
||||
- "mgmt tx compl ev pdev_id %d, desc_id %d, status %d",
|
||||
+ "mgmt tx compl ev pdev_id %d, desc_id %d, status %d ack_rssi %d",
|
||||
tx_compl_param.pdev_id, tx_compl_param.desc_id,
|
||||
- tx_compl_param.status);
|
||||
+ tx_compl_param.status, tx_compl_param.ack_rssi);
|
||||
|
||||
exit:
|
||||
rcu_read_unlock();
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
@@ -2311,6 +2311,7 @@ struct wmi_init_cmd {
|
||||
} __packed;
|
||||
|
||||
#define WMI_RSRC_CFG_FLAG1_BSS_CHANNEL_INFO_64 BIT(5)
|
||||
+#define WMI_RSRC_CFG_FLAG1_ACK_RSSI BIT(18)
|
||||
|
||||
struct wmi_resource_config {
|
||||
u32 tlv_header;
|
||||
@@ -4550,6 +4551,8 @@ struct wmi_mgmt_tx_compl_event {
|
||||
u32 desc_id;
|
||||
u32 status;
|
||||
u32 pdev_id;
|
||||
+ u32 ppdu_id;
|
||||
+ u32 ack_rssi;
|
||||
} __packed;
|
||||
|
||||
struct wmi_scan_event {
|
||||
-216
@@ -1,216 +0,0 @@
|
||||
From 25e289e1f52e1f4fb1d07622c6a24f8d8a8e420d Mon Sep 17 00:00:00 2001
|
||||
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Date: Wed, 1 Mar 2023 16:20:58 +0200
|
||||
Subject: [PATCH] wifi: ath11k: use proper regulatory reference for bands
|
||||
|
||||
Currently, during regulatory event, 2 GHz/5 GHz is referred
|
||||
to as 2G/5G including variable names. However, there is no
|
||||
such entity as 2G or 5G.
|
||||
|
||||
Re-name such occurences to its proper name. No functional changes.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230110121024.14051-2-quic_adisi@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/reg.c | 20 ++++-----
|
||||
drivers/net/wireless/ath/ath11k/wmi.c | 58 ++++++++++++++-------------
|
||||
drivers/net/wireless/ath/ath11k/wmi.h | 28 ++++++-------
|
||||
3 files changed, 54 insertions(+), 52 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/reg.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/reg.c
|
||||
@@ -619,7 +619,7 @@ ath11k_reg_build_regd(struct ath11k_base
|
||||
u32 flags;
|
||||
char alpha2[3];
|
||||
|
||||
- num_rules = reg_info->num_5g_reg_rules + reg_info->num_2g_reg_rules;
|
||||
+ num_rules = reg_info->num_5ghz_reg_rules + reg_info->num_2ghz_reg_rules;
|
||||
|
||||
if (!num_rules)
|
||||
goto ret;
|
||||
@@ -644,20 +644,20 @@ ath11k_reg_build_regd(struct ath11k_base
|
||||
alpha2, ath11k_reg_get_regdom_str(tmp_regd->dfs_region),
|
||||
reg_info->dfs_region, num_rules);
|
||||
/* Update reg_rules[] below. Firmware is expected to
|
||||
- * send these rules in order(2G rules first and then 5G)
|
||||
+ * send these rules in order(2 GHz rules first and then 5 GHz)
|
||||
*/
|
||||
for (; i < num_rules; i++) {
|
||||
- if (reg_info->num_2g_reg_rules &&
|
||||
- (i < reg_info->num_2g_reg_rules)) {
|
||||
- reg_rule = reg_info->reg_rules_2g_ptr + i;
|
||||
+ if (reg_info->num_2ghz_reg_rules &&
|
||||
+ (i < reg_info->num_2ghz_reg_rules)) {
|
||||
+ reg_rule = reg_info->reg_rules_2ghz_ptr + i;
|
||||
max_bw = min_t(u16, reg_rule->max_bw,
|
||||
- reg_info->max_bw_2g);
|
||||
+ reg_info->max_bw_2ghz);
|
||||
flags = 0;
|
||||
- } else if (reg_info->num_5g_reg_rules &&
|
||||
- (j < reg_info->num_5g_reg_rules)) {
|
||||
- reg_rule = reg_info->reg_rules_5g_ptr + j++;
|
||||
+ } else if (reg_info->num_5ghz_reg_rules &&
|
||||
+ (j < reg_info->num_5ghz_reg_rules)) {
|
||||
+ reg_rule = reg_info->reg_rules_5ghz_ptr + j++;
|
||||
max_bw = min_t(u16, reg_rule->max_bw,
|
||||
- reg_info->max_bw_5g);
|
||||
+ reg_info->max_bw_5ghz);
|
||||
|
||||
/* FW doesn't pass NL80211_RRF_AUTO_BW flag for
|
||||
* BW Auto correction, we can enable this by default
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
||||
@@ -4959,7 +4959,7 @@ static int ath11k_pull_reg_chan_list_upd
|
||||
const void **tb;
|
||||
const struct wmi_reg_chan_list_cc_event *chan_list_event_hdr;
|
||||
struct wmi_regulatory_rule_struct *wmi_reg_rule;
|
||||
- u32 num_2g_reg_rules, num_5g_reg_rules;
|
||||
+ u32 num_2ghz_reg_rules, num_5ghz_reg_rules;
|
||||
int ret;
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_WMI, "processing regulatory channel list\n");
|
||||
@@ -4978,10 +4978,10 @@ static int ath11k_pull_reg_chan_list_upd
|
||||
return -EPROTO;
|
||||
}
|
||||
|
||||
- reg_info->num_2g_reg_rules = chan_list_event_hdr->num_2g_reg_rules;
|
||||
- reg_info->num_5g_reg_rules = chan_list_event_hdr->num_5g_reg_rules;
|
||||
+ reg_info->num_2ghz_reg_rules = chan_list_event_hdr->num_2ghz_reg_rules;
|
||||
+ reg_info->num_5ghz_reg_rules = chan_list_event_hdr->num_5ghz_reg_rules;
|
||||
|
||||
- if (!(reg_info->num_2g_reg_rules + reg_info->num_5g_reg_rules)) {
|
||||
+ if (!(reg_info->num_2ghz_reg_rules + reg_info->num_5ghz_reg_rules)) {
|
||||
ath11k_warn(ab, "No regulatory rules available in the event info\n");
|
||||
kfree(tb);
|
||||
return -EINVAL;
|
||||
@@ -5008,46 +5008,48 @@ static int ath11k_pull_reg_chan_list_upd
|
||||
else if (chan_list_event_hdr->status_code == WMI_REG_SET_CC_STATUS_FAIL)
|
||||
reg_info->status_code = REG_SET_CC_STATUS_FAIL;
|
||||
|
||||
- reg_info->min_bw_2g = chan_list_event_hdr->min_bw_2g;
|
||||
- reg_info->max_bw_2g = chan_list_event_hdr->max_bw_2g;
|
||||
- reg_info->min_bw_5g = chan_list_event_hdr->min_bw_5g;
|
||||
- reg_info->max_bw_5g = chan_list_event_hdr->max_bw_5g;
|
||||
+ reg_info->min_bw_2ghz = chan_list_event_hdr->min_bw_2ghz;
|
||||
+ reg_info->max_bw_2ghz = chan_list_event_hdr->max_bw_2ghz;
|
||||
+ reg_info->min_bw_5ghz = chan_list_event_hdr->min_bw_5ghz;
|
||||
+ reg_info->max_bw_5ghz = chan_list_event_hdr->max_bw_5ghz;
|
||||
|
||||
- num_2g_reg_rules = reg_info->num_2g_reg_rules;
|
||||
- num_5g_reg_rules = reg_info->num_5g_reg_rules;
|
||||
+ num_2ghz_reg_rules = reg_info->num_2ghz_reg_rules;
|
||||
+ num_5ghz_reg_rules = reg_info->num_5ghz_reg_rules;
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_WMI,
|
||||
- "%s:cc %s dsf %d BW: min_2g %d max_2g %d min_5g %d max_5g %d",
|
||||
+ "%s:cc %s dsf %d BW: min_2ghz %d max_2ghz %d min_5ghz %d max_5ghz %d",
|
||||
__func__, reg_info->alpha2, reg_info->dfs_region,
|
||||
- reg_info->min_bw_2g, reg_info->max_bw_2g,
|
||||
- reg_info->min_bw_5g, reg_info->max_bw_5g);
|
||||
+ reg_info->min_bw_2ghz, reg_info->max_bw_2ghz,
|
||||
+ reg_info->min_bw_5ghz, reg_info->max_bw_5ghz);
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_WMI,
|
||||
- "%s: num_2g_reg_rules %d num_5g_reg_rules %d", __func__,
|
||||
- num_2g_reg_rules, num_5g_reg_rules);
|
||||
+ "%s: num_2ghz_reg_rules %d num_5ghz_reg_rules %d", __func__,
|
||||
+ num_2ghz_reg_rules, num_5ghz_reg_rules);
|
||||
|
||||
wmi_reg_rule =
|
||||
(struct wmi_regulatory_rule_struct *)((u8 *)chan_list_event_hdr
|
||||
+ sizeof(*chan_list_event_hdr)
|
||||
+ sizeof(struct wmi_tlv));
|
||||
|
||||
- if (num_2g_reg_rules) {
|
||||
- reg_info->reg_rules_2g_ptr = create_reg_rules_from_wmi(num_2g_reg_rules,
|
||||
- wmi_reg_rule);
|
||||
- if (!reg_info->reg_rules_2g_ptr) {
|
||||
+ if (num_2ghz_reg_rules) {
|
||||
+ reg_info->reg_rules_2ghz_ptr =
|
||||
+ create_reg_rules_from_wmi(num_2ghz_reg_rules,
|
||||
+ wmi_reg_rule);
|
||||
+ if (!reg_info->reg_rules_2ghz_ptr) {
|
||||
kfree(tb);
|
||||
- ath11k_warn(ab, "Unable to Allocate memory for 2g rules\n");
|
||||
+ ath11k_warn(ab, "Unable to Allocate memory for 2 GHz rules\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
|
||||
- if (num_5g_reg_rules) {
|
||||
- wmi_reg_rule += num_2g_reg_rules;
|
||||
- reg_info->reg_rules_5g_ptr = create_reg_rules_from_wmi(num_5g_reg_rules,
|
||||
- wmi_reg_rule);
|
||||
- if (!reg_info->reg_rules_5g_ptr) {
|
||||
+ if (num_5ghz_reg_rules) {
|
||||
+ wmi_reg_rule += num_2ghz_reg_rules;
|
||||
+ reg_info->reg_rules_5ghz_ptr =
|
||||
+ create_reg_rules_from_wmi(num_5ghz_reg_rules,
|
||||
+ wmi_reg_rule);
|
||||
+ if (!reg_info->reg_rules_5ghz_ptr) {
|
||||
kfree(tb);
|
||||
- ath11k_warn(ab, "Unable to Allocate memory for 5g rules\n");
|
||||
+ ath11k_warn(ab, "Unable to Allocate memory for 5 GHz rules\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@@ -6619,8 +6621,8 @@ fallback:
|
||||
WARN_ON(1);
|
||||
mem_free:
|
||||
if (reg_info) {
|
||||
- kfree(reg_info->reg_rules_2g_ptr);
|
||||
- kfree(reg_info->reg_rules_5g_ptr);
|
||||
+ kfree(reg_info->reg_rules_2ghz_ptr);
|
||||
+ kfree(reg_info->reg_rules_5ghz_ptr);
|
||||
kfree(reg_info);
|
||||
}
|
||||
return ret;
|
||||
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
||||
@@ -4129,14 +4129,14 @@ struct cur_regulatory_info {
|
||||
u8 alpha2[REG_ALPHA2_LEN + 1];
|
||||
u32 dfs_region;
|
||||
u32 phybitmap;
|
||||
- u32 min_bw_2g;
|
||||
- u32 max_bw_2g;
|
||||
- u32 min_bw_5g;
|
||||
- u32 max_bw_5g;
|
||||
- u32 num_2g_reg_rules;
|
||||
- u32 num_5g_reg_rules;
|
||||
- struct cur_reg_rule *reg_rules_2g_ptr;
|
||||
- struct cur_reg_rule *reg_rules_5g_ptr;
|
||||
+ u32 min_bw_2ghz;
|
||||
+ u32 max_bw_2ghz;
|
||||
+ u32 min_bw_5ghz;
|
||||
+ u32 max_bw_5ghz;
|
||||
+ u32 num_2ghz_reg_rules;
|
||||
+ u32 num_5ghz_reg_rules;
|
||||
+ struct cur_reg_rule *reg_rules_2ghz_ptr;
|
||||
+ struct cur_reg_rule *reg_rules_5ghz_ptr;
|
||||
};
|
||||
|
||||
struct wmi_reg_chan_list_cc_event {
|
||||
@@ -4148,12 +4148,12 @@ struct wmi_reg_chan_list_cc_event {
|
||||
u32 domain_code;
|
||||
u32 dfs_region;
|
||||
u32 phybitmap;
|
||||
- u32 min_bw_2g;
|
||||
- u32 max_bw_2g;
|
||||
- u32 min_bw_5g;
|
||||
- u32 max_bw_5g;
|
||||
- u32 num_2g_reg_rules;
|
||||
- u32 num_5g_reg_rules;
|
||||
+ u32 min_bw_2ghz;
|
||||
+ u32 max_bw_2ghz;
|
||||
+ u32 min_bw_5ghz;
|
||||
+ u32 max_bw_5ghz;
|
||||
+ u32 num_2ghz_reg_rules;
|
||||
+ u32 num_5ghz_reg_rules;
|
||||
} __packed;
|
||||
|
||||
struct wmi_regulatory_rule_struct {
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user