mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-06 06:52:00 +00:00
pd: NACK unsupported VDM requests
When a VDM request is not supported, return a proper NAK message rather than trying to execute a NULL pointer. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=samus BUG=none TEST=plug a power source sending discovery VDM to Samus. Change-Id: Iba60fd29d950c99fd981f9e8ecf3e911409147d5 Reviewed-on: https://chromium-review.googlesource.com/223780 Tested-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Todd Broch <tbroch@chromium.org> Reviewed-by: Alec Berg <alecaberg@chromium.org> Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
committed by
chrome-internal-fetch
parent
fd709edf12
commit
24699aead9
@@ -179,6 +179,7 @@ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload)
|
||||
int i;
|
||||
int cmd = PD_VDO_CMD(payload[0]);
|
||||
int cmd_type = PD_VDO_CMDT(payload[0]);
|
||||
int (*func)(int port, uint32_t *payload) = NULL;
|
||||
|
||||
int rsize = 1; /* VDM header at a minimum */
|
||||
ccprintf("%T] SVDM/%d [%d] %08x", cnt, cmd, payload[0]);
|
||||
@@ -192,21 +193,25 @@ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload)
|
||||
if (cmd_type == CMDT_INIT) {
|
||||
switch (cmd) {
|
||||
case CMD_DISCOVER_IDENT:
|
||||
rsize = svdm_rsp.identity(port, payload);
|
||||
func = svdm_rsp.identity;
|
||||
break;
|
||||
case CMD_DISCOVER_SVID:
|
||||
rsize = svdm_rsp.svids(port, payload);
|
||||
func = svdm_rsp.svids;
|
||||
break;
|
||||
case CMD_DISCOVER_MODES:
|
||||
rsize = svdm_rsp.modes(port, payload);
|
||||
func = svdm_rsp.modes;
|
||||
break;
|
||||
case CMD_ENTER_MODE:
|
||||
rsize = svdm_rsp.enter_mode(port, payload);
|
||||
func = svdm_rsp.enter_mode;
|
||||
break;
|
||||
case CMD_EXIT_MODE:
|
||||
rsize = svdm_rsp.exit_mode(port, payload);
|
||||
func = svdm_rsp.exit_mode;
|
||||
break;
|
||||
}
|
||||
if (func)
|
||||
rsize = func(port, payload);
|
||||
else /* not supported : NACK it */
|
||||
rsize = 1;
|
||||
if (rsize > 1)
|
||||
payload[0] |= VDO_CMDT(CMDT_RSP_ACK);
|
||||
else if (rsize == 1)
|
||||
|
||||
Reference in New Issue
Block a user