BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mangoh-drivers
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
mangoh-drivers
Commits
b1286e41
Commit
b1286e41
authored
Nov 27, 2017
by
David Clark
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed UART driver shutdown:
- added UART shutdown req/rsp msg - updated location where UART close called so its not called while atomic
parent
2fb4dcb2
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
83 additions
and
29 deletions
+83
-29
mt7697_i.h
linux_kernel_modules/mt7697common/mt7697_i.h
+1
-0
uart.c
linux_kernel_modules/mt7697serial/uart.c
+66
-16
uart.h
linux_kernel_modules/mt7697serial/uart.h
+7
-2
cfg80211.c
linux_kernel_modules/mt7697wifi/cfg80211.c
+8
-10
main.c
linux_kernel_modules/mt7697wifi/main.c
+1
-1
No files found.
linux_kernel_modules/mt7697common/mt7697_i.h
View file @
b1286e41
...
...
@@ -24,6 +24,7 @@
enum
mt7697_cmd_grp
{
MT7697_CMD_GRP_QUEUE
=
0
,
MT7697_CMD_GRP_UART
,
MT7697_CMD_GRP_80211
,
MT7697_CMD_GRP_BT
,
};
...
...
linux_kernel_modules/mt7697serial/uart.c
View file @
b1286e41
...
...
@@ -20,6 +20,34 @@
#include <asm/uaccess.h>
#include "uart.h"
static
int
mt7697_uart_snd_shutdown_req
(
struct
mt7697_uart_info
*
uart_info
)
{
struct
mt7697_uart_shutdown_req
req
;
int
ret
;
req
.
len
=
sizeof
(
struct
mt7697_uart_shutdown_req
);
req
.
grp
=
MT7697_CMD_GRP_UART
;
req
.
type
=
MT7697_CMD_UART_SHUTDOWN_REQ
;
dev_dbg
(
uart_info
->
dev
,
"%s(): <-- UART SHUTDOWN len(%u)
\n
"
,
__func__
,
req
.
len
);
ret
=
mt7697_uart_write
(
uart_info
,
(
const
u32
*
)
&
req
,
LEN_TO_WORD
(
sizeof
(
struct
mt7697_uart_shutdown_req
)));
if
(
ret
!=
LEN_TO_WORD
(
sizeof
(
struct
mt7697_uart_shutdown_req
)))
{
dev_err
(
uart_info
->
dev
,
"%s(): mt7697_uart_write() failed(%d != %d)
\n
"
,
__func__
,
ret
,
LEN_TO_WORD
(
sizeof
(
struct
mt7697_uart_shutdown_req
)));
ret
=
(
ret
<
0
)
?
ret
:-
EIO
;
goto
cleanup
;
}
ret
=
0
;
cleanup:
return
ret
;
}
static
int
mt7697_uart_rx_poll
(
struct
mt7697_uart_info
*
uart_info
)
{
struct
poll_wqueues
table
;
...
...
@@ -86,11 +114,6 @@ static void mt7697_uart_rx_work(struct work_struct *rx_work)
goto
cleanup
;
}
if
(
atomic_read
(
&
uart_info
->
close
))
{
dev_warn
(
uart_info
->
dev
,
"%s(): closed
\n
"
,
__func__
);
goto
cleanup
;
}
ret
=
mt7697_uart_read
(
uart_info
,
(
u32
*
)
&
uart_info
->
rsp
,
LEN_TO_WORD
(
sizeof
(
struct
mt7697_rsp_hdr
)));
if
(
ret
!=
LEN_TO_WORD
(
sizeof
(
struct
mt7697_rsp_hdr
)))
{
...
...
@@ -114,15 +137,34 @@ static void mt7697_uart_rx_work(struct work_struct *rx_work)
uart_info
->
rsp
.
result
);
}
WARN_ON
(
!
uart_info
->
rx_fcn
);
err
=
uart_info
->
rx_fcn
((
const
struct
mt7697_rsp_hdr
*
)
&
uart_info
->
rsp
,
uart_info
->
rx_hndl
);
dev_dbg
(
uart_info
->
dev
,
"%s(): rx_fcn ret(%d)
\n
"
,
__func__
,
err
);
if
(
err
<
0
)
{
dev_err
(
uart_info
->
dev
,
"%s(): rx_fcn() failed(%d)
\n
"
,
__func__
,
err
);
}
if
(
uart_info
->
rsp
.
cmd
.
grp
==
MT7697_CMD_GRP_UART
)
{
if
(
uart_info
->
rsp
.
cmd
.
type
==
MT7697_CMD_UART_SHUTDOWN_RSP
)
{
dev_dbg
(
uart_info
->
dev
,
"%s(): --> UART SHUTDOWN RSP
\n
"
,
__func__
);
}
else
{
dev_err
(
uart_info
->
dev
,
"%s(): Rx invalid message type(%d)
\n
"
,
__func__
,
uart_info
->
rsp
.
cmd
.
type
);
}
if
(
atomic_read
(
&
uart_info
->
close
))
{
dev_warn
(
uart_info
->
dev
,
"%s(): closed
\n
"
,
__func__
);
goto
cleanup
;
}
}
else
{
WARN_ON
(
!
uart_info
->
rx_fcn
);
err
=
uart_info
->
rx_fcn
((
const
struct
mt7697_rsp_hdr
*
)
&
uart_info
->
rsp
,
uart_info
->
rx_hndl
);
dev_dbg
(
uart_info
->
dev
,
"%s(): rx_fcn ret(%d)
\n
"
,
__func__
,
err
);
if
(
err
<
0
)
{
dev_err
(
uart_info
->
dev
,
"%s(): rx_fcn() failed(%d)
\n
"
,
__func__
,
err
);
}
}
}
cleanup:
...
...
@@ -204,6 +246,16 @@ int mt7697_uart_close(void *arg)
}
atomic_set
(
&
uart_info
->
close
,
1
);
ret
=
mt7697_uart_snd_shutdown_req
(
uart_info
);
if
(
ret
<
0
)
{
dev_err
(
uart_info
->
dev
,
"%s(): mt7697_uart_snd_shutdown_req() failed(%d)
\n
"
,
__func__
,
ret
);
goto
cleanup
;
}
wait_event_interruptible
(
uart_info
->
close_wq
,
!
atomic_read
(
&
uart_info
->
close
));
ret
=
filp_close
(
uart_info
->
fd_hndl
,
0
);
if
(
ret
<
0
)
{
dev_err
(
uart_info
->
dev
,
"%s(): filp_close() failed(%d)
\n
"
,
...
...
@@ -211,8 +263,6 @@ int mt7697_uart_close(void *arg)
goto
cleanup
;
}
wait_event_interruptible
(
uart_info
->
close_wq
,
!
atomic_read
(
&
uart_info
->
close
));
cancel_work_sync
(
&
uart_info
->
rx_work
);
uart_info
->
fd_hndl
=
MT7697_UART_INVALID_FD
;
cleanup:
...
...
linux_kernel_modules/mt7697serial/uart.h
View file @
b1286e41
...
...
@@ -26,8 +26,13 @@
#define MT7697_UART_DEVICE "/dev/ttyHS0"
#define MT7697_UART_INVALID_FD NULL
#define mt7697_uart_reset_req mt7697_cmd_hdr
#define mt7697_uart_reset_rsp mt7697_rsp_hdr
#define mt7697_uart_shutdown_req mt7697_cmd_hdr
#define mt7697_uart_shutdown_rsp mt7697_rsp_hdr
enum
mt7697_uart_cmd_types
{
MT7697_CMD_UART_SHUTDOWN_REQ
=
0
,
MT7697_CMD_UART_SHUTDOWN_RSP
,
};
struct
mt7697_uart_info
{
struct
platform_device
*
pdev
;
...
...
linux_kernel_modules/mt7697wifi/cfg80211.c
View file @
b1286e41
...
...
@@ -1139,6 +1139,14 @@ int mt7697_cfg80211_stop(struct mt7697_vif *vif)
vif
->
scan_req
=
NULL
;
}
ret
=
vif
->
cfg
->
hif_ops
->
close
(
vif
->
cfg
->
txq_hdl
);
if
(
ret
<
0
)
{
dev_err
(
vif
->
cfg
->
dev
,
"%s(): close() failed(%d)
\n
"
,
__func__
,
ret
);
}
vif
->
cfg
->
rxq_hdl
=
NULL
;
cleanup:
return
ret
;
}
...
...
@@ -1209,16 +1217,6 @@ static void mt7697_cleanup_vif(struct mt7697_cfg80211_info *cfg)
__func__
,
ret
);
}
}
else
{
ret
=
vif
->
cfg
->
hif_ops
->
close
(
vif
->
cfg
->
txq_hdl
);
if
(
ret
<
0
)
{
dev_err
(
vif
->
cfg
->
dev
,
"%s(): shutdown() failed(%d)
\n
"
,
__func__
,
ret
);
}
vif
->
cfg
->
rxq_hdl
=
NULL
;
}
list_del
(
&
vif
->
next
);
WARN_ON
(
vif
->
sta_count
>
0
);
...
...
linux_kernel_modules/mt7697wifi/main.c
View file @
b1286e41
...
...
@@ -26,7 +26,7 @@
#include "core.h"
#include "cfg80211.h"
static
char
*
hw_itf
=
"
spi
"
;
static
char
*
hw_itf
=
"
uart
"
;
module_param
(
hw_itf
,
charp
,
S_IRUGO
);
MODULE_PARM_DESC
(
hw_itf
,
"MT7697 transport interface (SPI/UART"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment