Commit Graph

131 Commits

Author SHA1 Message Date
Anurag Chouhan
5de8d17671 qcacld-3.0: Add BSS status caching
Add BSS status caching to get the BSS Information
when disconnect happens.

Change-Id: I41b74700b161277bc454d8bb8978f4e1e92faea8
CRs-Fixed: 1013475
2016-07-15 04:23:12 -07:00
Gupta, Kapil
8a605e1b59 qcacld-3.0: Correct len size of oem data request
qcacld-2.0 to qcacld-3.0 propagation.

oem data request len size should be of 4 byte instead of
1 byte.
Add changes to correct len size in oem data structure across the
layers.

Change-Id: I9b377420c50ff1160964f94be5eaa0072df0f63d
CRs-Fixed: 1013488
2016-07-13 15:27:49 -07:00
Tushnim Bhattacharyya
f44a9d86cd qcacld-3.0: Fix chain mask & nss in policy manager connection table
The chain mask in policy manager connection table needs to be updated
with the capability that HW advertises at load time intersected with
related ini configuration on host. The dynamic change of the chain
mask & NSS values will be handled only by chain mask manager in
firmware.

Change-Id: I250668c93920a63c9278aefe93491cb5aaa91ca7
CRs-Fixed: 1037816
2016-07-12 10:02:49 -07:00
Manjeet Singh
f82ed071d0 qcacld-3.0: Add support for WMI_PDEV_WAL_POWER_DEBUG_CMD
Add support for WMI POWER DEBUG command to control mac_core power features
for run time debugging.

Change-Id: I77ad747843cae31de1705b7ce8fa80e18c9ca53e
CRs-Fixed: 1007598
2016-07-08 05:14:42 -07:00
Naveen Rawat
8d63a59f3b qcacld-3.0: Add NDP reason codes in deferred rsp sent for NDP commands
This is qcacld-2.0 to qcacld-3.0 propagation.

Add NDP reason codes in deferred response sent for NDP commands so that
failure during processing of NDP cmds can be notified to service layer.

Change-Id: I731b520fde226c351464d94033a1ced2888a4d18
CRs-Fixed: 962367
2016-07-06 13:31:56 -07:00
Naveen Rawat
64a9a1a5b3 qcacld-3.0: Free up ndp sme command resources at sme close
This is qcacld-2.0 to qcacld-3.0 propagation

Free up memory allocated for NDP SME commands at sme_close, so that in
the event of unload while NDP command response was awaited, resources
can be freed.

Change-Id: I287ad77cbdca4b816f38bea436173b88e6eafc93
CRs-Fixed: 962367
2016-07-06 13:31:38 -07:00
Deepak Dhamdhere
a6d2f4cec4 qcacld-3.0: Process NDP data end indication
qcacld-2.0 to qcacld-3.0 propagation

Firmware sends an array of:
    {ndp instance id, vdev id, active ndp num, peer mac address}
for the NDP instances that are to be terminated.
Host driver deletes the peers that have 0 active ndp instances and
sends the entire list of ndp instance id's to the service layer.

Change-Id: I325843ce7fb8198466cb66ce66710cef999d4581
CRs-Fixed: 962367
2016-07-06 13:31:29 -07:00
Naveen Rawat
f28315cd66 qcacld-3.0: Add support for NAN Data End Request
This is qcacld-2.0 to qcacld-3.0 propagation.

Add implementation of NAN Data End request.

Change-Id: Iddd22a83b0763dab2e7398f4d2cf5b9ada58225a
CRs-Fixed: 962367
2016-07-06 13:31:24 -07:00
Abhishek Singh
4fef747c51 qcacld-3.0: Add support for NDP Responder Request
This is qcacld-2.0 to qcacld-3.0 propagation

Add implementation for non-auto accept NDP responder request.

Change-Id: I2ced33cfa0faf487d8e31275493e8d85251e8c59
CRs-Fixed: 962367
2016-07-06 13:31:11 -07:00
Deepak Dhamdhere
0f076bd0db qcacld-3.0: Add support for NDP data initiator request
qcacld-2.0 to qcacld-3.0 propagation

Add host side changes to handle INITIATOR_REQ, INITIATOR_RSP,
NEW_PEER_IND and NDP_CONFIRM_IND to support NDP data initiator
request.

Change-Id: I10bf88d3fff27e1f842b720a598c923983c06c90
CRs-Fixed: 962367
2016-07-06 13:31:04 -07:00
Peng Xu
8fdaa49618 qcacld-3.0: Implement P2P listen offload feature
To lower the power consumption caused by the P2P listen operation,
it is offloaded from supplicant and host driver to firmware,
so that supplicant and host driver can be in power save mode during the
listen operation.

Change-Id: Iedd990427afe22842faecc7b29e4f38220c75684
CRs-fixed: 1032877
2016-07-06 13:30:23 -07:00
Krunal Soni
3091bcc07d qcacld-3.0: Remove deprecated gPolicyManagerEnable INI item
gPolicyManagerEnable INI item is no longer needed. Remove this
INI item and make policy manager code enabled by default.

Change-Id: I57822f47325c03e940b2802fb02900c64d3587e1
CRs-Fixed: 1034888
2016-07-06 13:30:12 -07:00
Deepak Dhamdhere
13983f2571 qcacld-3.0: Handle request to delete NAN Data Interface (NDI)
qcacld-2.0 to qcacld-3.0 propagation

Add changes to handle request to delete NAN datapath interface.

Change-Id: I3efef6adf6c7a974d3e344a7609f8517cd1aa752
CRs-Fixed: 962367
2016-06-29 19:42:08 -07:00
Deepak Dhamdhere
5cdce8429e qcacld-3.0: Add support for NDP vendor commands and NDI Create
Add support for NDP vendor commands and implement NAN Data Interface
create.

Propagation from qcacld-2.0 to qcacld-3.0

CRs-Fixed: 962367
Change-Id: I84e9ac5ccfe8faaa00dfc448defb81fb792263d5
2016-06-29 19:42:07 -07:00
Deepak Dhamdhere
e2dd5440bf qcacld-3.0: Implement NAN datapath interface create
qcacld-2.0 to qcacld-3.0 propagation

Add changes to support session and BSS creation in NDI mode.

CRs-Fixed: 962367
Change-Id: I585cd89702a2c412783ae93fb1558ed5bfe31fd9
2016-06-29 19:42:05 -07:00
Ravi Joshi
412f23deb2 qcacld-3.0: Add interface changes for supporting NAN data path
Add interface changes to enable NAN data path feature

Propagation from qcacld-2.0 to qcacld-3.0

CRs-Fixed: 962367
Change-Id: I12a1d0cf37db22ff0bcb8165cb3f6b3847f8bf5b
2016-06-29 19:42:04 -07:00
Deepak Dhamdhere
c9acc447ea qcacld-3.0: Add messaging interface to support NAN datapath
qcacld-2.0 to qcacld-3.0 propagation

Add messaging interface to support NAN datapath.
"NAN" terminology is used for referencing NAN discovery.
"NDI" and "NDP" are for NAN datapath.

CRs-Fixed: 962367
Change-Id: I1f42c8dab17b3a300db61756c29fc02d3d3bc504
2016-06-29 19:42:02 -07:00
Archana Ramachandran
5041b2579e qcacld-3.0: Support NSS configuration for TDLS from user space
qcacld-2.0 to qcacld-3.0 propagation

TDLS NSS can be changed dynamically by the user, if that happens
the newer NSS value needs to be recorded in the MAC context and
should be used to form TDLS management frames.
Update driver to keep the user configured NSS value in the MAC
context and uses the NSS value in the tdls protocol engine
to construct management frames.

Change-Id: I4098e3c5e3a03c4de6ae40c837a5616613623979
CRs-Fixed: 968106
2016-06-29 18:41:25 -07:00
Ravi Joshi
a063dd9f69 qcacld-3.0: Create new files for supporting NAN data path feature
Add new files for supporting NAN data path feature.

Propagation from qcacld-2.0 to qcacld-3.0

CRs-Fixed: 962367
Change-Id: If12d15789659d04559a9d65d6b7016d4cc595fcf
2016-06-27 18:17:22 -07:00
Kabilan Kannan
14ec97f448 qcacld-3.0: Stop connection tracker during TDLS UAPSD and btcoex
Connection tracker should not run, when the events TDLS UAPSD
and btcoex happens in the system.
Add changes in the host driver to stop connection tracker
for the aforementioned events.

Change-Id: Ib631dc986826339a4c191328f187e46f4e0392d9
CRs-Fixed: 1025613
2016-06-27 18:10:17 -07:00
Kiran Kumar Lokere
666bf8591b qcacld-3.0: Add support for NSS configurability
qcacld-2.0 to qcacld-3.0 propagation

Add support for NSS configurability per vdev type
- Configure the 2g and 5g NSS with the INI value of
each vdev type
- Program the HT and VHT IE to FW for 1x1 and 2x2 mode,
FW will include them in scan probe request frames

Change-Id: I5cbf17a14ab6becad6cf5765ae5039fc284dc309
CRs-Fixed: 869026
2016-06-24 14:30:50 -07:00
Sandeep Puligilla
1cc23f6e37 qcacld-3.0: Obtain channel params from CDS
All the regulatory and channel management functionality
moved to CDS.

Cleanup the SME redundant functionality related to channel
parameters generation and update all the code references
to CDF API's

Change-Id: Iaf4e15b4ebb7107d8bbf7a54e42f9ea9358dcdaf
CRs-Fixed: 994562
2016-06-23 12:28:15 -07:00
Abhishek Singh
1c67622020 qcacld-3.0: Set wlan phy mode in OEM channel info response
qcacld-2.0 to qcacld-3.0 propagation

Calculate and add wlan phy mode for each channel in OEM channel
info response.
Also send ANI_MSG_PEER_STATUS_IND indication for STA mode when
STA gets connected.

Change-Id: I91363e90698cabda72028135eb7fe9adeb1fbc86
CRs-Fixed: 1007004
2016-06-23 12:27:37 -07:00
Gupta, Kapil
96c7f2f620 qcacld-3.0: Add support for adaptive dwell scan time
Dwell time can be modify based on channel congestion per scan
request.
Add changes to enable firmware to use scan control flag and
select dwell time optimization algorithm based on ini values.

Change-Id: Iea3de57c1b7d087442e4b8984b4184d24bb8c930
CRs-Fixed: 994443
2016-06-23 12:26:44 -07:00
Amar Singhal
83a047accb qcacld-3.0: Process SET_FCC_CHANNEL only after scan is finished
Currently SET_FCC_CHANNEL issues "update channel list" to firmware.
If scan is in progress, firmware aborts the scan resuting delay in
results update on the GUI. To avoid this, issue "update channel list"
only after scan is finished.

CRs-Fixed: 972208
Change-Id: I4c34010109443434bbe3abf45df7a0cf2effbee2
2016-06-01 10:49:56 -07:00
Amar Singhal
7c1e898b61 qcacld-3.0: Enable channels 12 & 13 when SET_FCC_CHANNEL is set
qcacld-2.0 to qcacld-3.0 propagation

Currently Ch 12/13 are disabled when SET_FCC_CHANNEL is issued by
framework. To meet FCC rules and to meet requirement for
other countries regulatory reduce TxPower for channel 12/13.

Change-Id: Ie833804e565f40e28845160452d3245334a34308
CRs-Fixed: 961580
2016-06-01 10:49:46 -07:00
Varun Reddy Yeturu
7fc616d09a qcacld-3.0: Disable HI_RSSI_SCAN in few scenarios
qcacld-2.0 to qcacld-3.0 propagation

The HI_RSSI_SCAN feature is only meant to address the
scenario where user walks into a home which has dual band
AP and the 2.4G AP is visible initially and then the 5G AP
is visible later.
Disable the HI_RSSI_SCAN feature in the following cases:
1. Connection is a roaming connection
2. Connection is made with a 5G AP
3. Connection is made with a 2.4G AP, but the rssi is
   stronger than the hi_rssi_lookup_threshold

CRs-Fixed: 975401
Change-Id: I86c63d9f8b51b6bdccc804163241ffe5640baf4d
2016-05-23 11:46:46 -07:00
Varun Reddy Yeturu
ff4feb0a0e qcacld-3.0: Cleanup NCHO commands
Aggregate all the handlers of NCHO configration update
commands into a single routine

CRs-Fixed: 1007810
Change-Id: I9722dbead499f14f3969a85a20baf74aa03efff2
2016-05-23 11:46:41 -07:00
Abhishek Singh
10ecf58dc6 qcacld-3.0: Add INI params to set edca min, max and aifs params
qcacld-2.0 to qcacld-3.0 propagation

Add INI params gEdcaVoCwmin, gEdcaViCwmin, gEdcaBkCwmin,
gEdcaBeCwmin, gEdcaVoCwmax, gEdcaViCwmax, gEdcaBkCwmax,
gEdcaBeCwmax, gEdcaVoAifs, gEdcaViAifs, gEdcaBkAifs and
gEdcaBeAifs to control edca params for STA mode.

These params will overwrite the values from AP only if
gEnableEdcaParams is set.

Change-Id: I1e688a67df320208416aba4ca40fd870a947e3be
CRs-Fixed: 996685
2016-05-23 11:46:12 -07:00
Manikandan Mohan
80dea79636 qcacld-3.0: Add WISA feature handling
Add support to enable WISA feature using QCA_NL80211_VENDOR_SUBCMD_WISA
and do scan blocking on WISA mode interface.

Change-Id: Ief105310fb71779b1a8c1d580408a489cad9977e
CRs-fixed: 997798
2016-05-18 16:33:19 -07:00
Varun Reddy Yeturu
d1ecb4b070 qcacld-3.0: Remove csr_get_current_ap_rssi
Remove csr_get_current_ap_rssi which is not used

CRs-Fixed: 1007810
Change-Id: I2b9f82f64d2cd038abd61a0087886724daa19424
2016-05-18 16:31:51 -07:00
Varun Reddy Yeturu
5a1985a9f2 qcacld-3.0: Remove csr_neighbor_roam_offload_update_preauth_list
Remove csr_neighbor_roam_offload_update_preauth_list which is
unused currently after roam synch propagation optimization for
LFR3.0 has been done.

CRs-Fixed: 1007810
Change-Id: Icc8ef8a882813d980f05314cf07a379e607323ad
2016-05-18 16:31:47 -07:00
Agrawal Ashish
17bb3908da qcacld-3.0: Ini change for dyanmic min_rest_time and idle_time
qcacld-2.0 to qcacld-3.0 propagation

Currently default min_rest_time, max_rest_time and idle_time
are 50, 100 and 25 respectively.
When STA is connected in default behavior, DUT will stay on home channel
for 50 ms, then check traffic at every 25 ms increments.
If no traffic, then it will move to the next channel.
It will stay on home channel for max 100 ms. So 75 and 100
are the possible max_rest_time values.
If idle_time is reduced to lower value, better throughput
is possible as DUT need not to wait on same channel for
data inactivity.
Introduced ini params to configure min_rest_time & idle_time.

Change-Id: If28b7a30147fc11c67817314021fa502d2d8f5ad
CRs-Fixed: 952151
2016-05-09 11:28:52 -07:00
Manjunathappa Prakash
59f861d11d qcacld-3.0: Add monitor mode support
Add monitor mode support. Configure target to deliver 802.11 packets
in raw mode. Below is the procedure to start the monitor mode.
insmod /system/lib/modules/wlan.ko con_mode=4
ifconfig wlan0 up
"iwpriv wlan0 setMonChan 36 2"
or
"iw dev mon0 set channel 36 HT40+"
tcpdump -i wlan0 -w <tcpdump.pcap>

In this mode concurrency is not supported and module doesnot support Tx.

Change-Id: I211ece0a66e2d43bc111e523714942e1557e36f4
CRs-Fixed: 963060
2016-05-06 17:01:48 -07:00
Arun Khandavalli
2476ef58f4 qcacld-3.0: Add support for BPF data offload
qcacld-2.0 to qcacld-3.0 propagation

Currently wlan firmware has multiple different packet filters,
offload features such as Magic Pattern filter, MCBC filter,
RA filter and Bitmap pattern filter.
Firmware has to maintain different filter settings and different
source code to compare the filters.

BPF data offload is common architecture for packet filter offload.
Implement BPF data offload in driver.

Change-Id: I63a5f7222de74cbb80d656f20f42d1b8453dce26
CRs-Fixed: 960473
2016-05-06 17:01:47 -07:00
Kiran Kumar Lokere
27a7eabd94 qcacld-3.0: Remove the vhtTxChannelWidthSet parameter
vhtTxChannelWidthSet is redundant parameter for channel width
as phy_ch_width is used to represent the channel width. So remove
the redundant parameter

Change-Id: Ied9ef3dddfcb89bac8d49c5c0dd2f21b3d041567
CRs-Fixed: 1007367
2016-05-06 17:01:47 -07:00
Abhishek Singh
5ea86536ef qcacld-3.0: Add scenario based BUG report
qcacld-2.0 to qcacld-3.0 propagation

Change to initiate BUG report in case of fatal event
Add INI support to Enable/Disable it.

The fatal event handled are as below:
 - Roaming failed after successful preauth.
 - SME command timeout.
 - PE defer queue is full.
 - CDS run out of message wrapper.
 - HDD level wait for event timeout.

CRs-Fixed: 912560
Change-Id: I64dff8b7d0836340ce3bec5f5985d1919b600c23
2016-05-04 21:18:44 -07:00
Manishekar Chandrasekaran
cb0521722b qcacld-3.0: Modify set hw mode sequence on channel switch scenarios
Modify the set hardware mode command sequence during channel switch
in the case of SAP/P2P-GO and STA/P2P-CLI as per the latest FW
requirements. This is primarily to accommodate the time take for
calibration during hardware mode change which could lead to
momentary data stalls.

The new sequence is as follows:
    1. Send (E)CSA
    2. Do vdev restart/vdev up
    3. For DBS downgrade:
       a. PM will initiate HW mode change to DBS right away
    4. For single MAC upgrade:
       a. Opportunistic timer is started, PM will check if MCC
          upgrade can be done on timer expiry

The old sequence is as follows:
    For MCC upgrade:
        1. Send (E)CSA
        2. Opportunistic timer is started
        3. vdev restart is initiated on the new channel
        4. PM will check if MCC upgrade can be done on timer expiry
    For single mac upgrade:
        1. Send (E)CSA
        2. PM will initiate HW mode change to DBS right away
        3. vdev restart is initiated on the new channel

Change-Id: I4bce2ee176cae43b6a46c47216ed7ab47a82a54c
CRs-Fixed: 1006992
2016-05-04 21:17:33 -07:00
Manishekar Chandrasekaran
d96403461f qcacld-3.0: Replace soc level references of set hw request and response
Replace the obsolete WMI command WMI_SOC_SET_HW_MODE_CMDID with
WMI_PDEV_SET_HW_MODE_CMDID and event WMI_SOC_SET_HW_MODE_RESP_EVENTID
with WMI_PDEV_SET_HW_MODE_RESP_EVENTID respectively. These new WMI
commands and events additionally carry the pdev id and all mac id
references are replaced with pdev id.

Change-Id: If2a3f93dcd1947eedce8d4eac8ed936166f7e078
CRs-Fixed: 989502
2016-05-04 21:14:01 -07:00
Manikandan Mohan
976e756f56 qcacld-3.0: Configure tsf gpio pin
qcacld-2.0 to qcacld-3.0 propagation

Add configuration of gpio pin used for TSF. FW shall toggle
this gpio when receive capture/get tsf cmd.

Change-Id: I442f2de3af4f3946a20bf3f4a9d8c9b285aa7a7c
CRs-Fixed: 817527
2016-05-02 23:27:52 -07:00
Manikandan Mohan
dcc21ba7f6 qcacld-3.0: get tsf from fw
qcacld-2.0 to qcacld-3.0 propagation

Get tsf from fw. Provide ioctl interface cap_tsf/get_tsf.
Driver issue wmi cmd to fw to realize capture/get.
It can be used in station and softap mode. For sta, getting
tsf from connected ap. For softap, it will generate tsf by-
self

Change-Id: I00d30882bce2f49ee3de3fa189e094c04c0d9943
CRs-Fixed: 817527
2016-05-02 23:27:49 -07:00
Manishekar Chandrasekaran
7009f25399 qcacld-3.0: Replace WMI_SOC_SET_PCL_CMDID with WMI_PDEV_SET_PCL_CMDID
Replace the obsolete WMI command WMI_SOC_SET_PCL_CMDID with
WMI_PDEV_SET_PCL_CMDID. WMI_PDEV_SET_PCL_CMDID carries the weightage
for all the channels (preferred and non-preferred) in the same order
and length as that of the command WMI_SCAN_CHAN_LIST_CMDID. This is
in contrast to the command WMI_SOC_SET_PCL_CMDID which carries only
the preferred channel list.

Change-Id: I040f4307491d3242d2e9409dbbe8005c4b307bf5
CRs-Fixed: 989502
2016-04-25 22:55:25 -07:00
Rajeev Kumar
94c9b45b3d qcacld-3.0: Pass IBSS peer mac address received from target
Propagation from qcacld-2.0 to qcacld-3.0

Pass mac address received from target in IBSS peer info event to
user space. In addition remove pronto specific rate conversion
logic as ROME FW returns data rate in Mbps directly

Change-Id: Id89e9f357831f242c43fc8ce121de18a3180e422
CRs-Fixed: 777960
2016-04-20 22:24:32 -07:00
Varun Reddy Yeturu
f907f91deb qcacld-3.0: Reduce packet loss while roaming
As soon as the firmware is done with the roaming scan and about to
start hand-off, it will notify the host that the roaming is about
to start using WMI_ROAM_NOTIF_ROAM_START. The host driver will
then notify the upper layers to stop sending the packets and
the host later informs them as part of roam synch propagation
after roaming is done to start sending the packets.

Once the firmware sends the notification and if it fails to roam
for some reason, then it will send another notification
WMI_ROAM_NOTIF_ROAM_ABORT to let the host know the upper layers
to resume sending the packets again.

Introduce an operation code for the CSR roaming callback to determine
what it needs to do when called by the lower layers.

CRs-Fixed: 996949
Change-Id: I674262b95f1781747b34fb675ad179952a8ae4d1
2016-04-20 22:24:17 -07:00
Gupta, Kapil
4cb1d7d032 qcacld-3.0: Add support for beacon filtering
qcacld-2.0 to qcacld-3.0 propagation

In case of DFS channels and EBT is disabled, beacons are
forwarded to host in every 50msecs which increase power consumption.
Add the changes to set beacon filter once DUT connect to AP.

CRs-Fixed: 973958
Change-Id: I1a9379eacbd13f8dc7fae08923cd91f087d1b2b2
2016-04-20 22:23:23 -07:00
Poddar, Siddarth
8390502e2e qcacld-3.0: add ini support for throttling period duty cycles
qcacld-2.0 to qcacld-3.0 propagation

Provide support to configure duty cycle by adding ini item for
different level duty cycle.

CRs-Fixed: 990798
Change-Id: I95e4f4af669fd50c5b9fc10ffc61fa5d447b5bcf
2016-04-20 22:23:19 -07:00
Krishna Kumaar Natarajan
ee4dbedf8f qcacld-3.0: Increase maximum size of oem data request
Increase maximum size of oem data request from 280 to 500. This
change set also remove the following unused macros in UMAC
- OEM_DATA_REQ_SIZE
- OEM_DATA_RSP_SIZE

Change-Id: I768da4dd03c2de618c528cb72b86a5df72dd2efe
CRs-Fixed: 997085
2016-04-20 22:23:11 -07:00
Abhishek Singh
165bc60022 qcacld-3.0: Add INI param to ignore HT op mode of peer AP
qcacld-2.0 to qcacld-3.0 propagation

Currently even if peer AP is in Legacy mode, driver can enable
11g protection, even though there is no 11g AP in vicinity.

As a part of fix, add an INI param which will enable 11g
protection only when there is a 11g AP in vicinity.

Change-Id: Ic76e6070b02f92ef33934a0e5158fa4ef6c3e45b
CRs-Fixed: 897755
2016-04-20 22:22:35 -07:00
Krishna Kumaar Natarajan
a96ee0f6ee qcacld-3.0: Fix incorrect buffer handling in OEM response handlers
qcacld-2.0 to qcacld-3.0 propagation.

Fix incorrect buffer handling in OEM response handlers.

This change set will fix,
1. Add appropriate check on the response length before malloc.
2. Add correct check for malloc failure.
3. Copy correct number of bytes into response buffer.

Change-Id: I621e391b9cdadbf01c98fdbf3ac1979373bb963c
CRs-Fixed: 996236
2016-04-20 22:21:42 -07:00
Rajeev Kumar
43e25b17d1 qcacld-3.0: Fix layer violation in SME
Some of the SME APIs are using lim APIs, remove those violation.

CRs-Fixed: 992939
Change-Id: I0f29b5ab3a4c5df9881b5af556d155a22acfd392
2016-04-20 22:20:44 -07:00