Commit Graph

100511 Commits

Author SHA1 Message Date
Guy Eilam
ea559b4605 wl1271: fixed problem with WPS IEs in probe requests
Inclusion of a WPS IE in probe requests caused a problem
in the driver due to the maximum size of the probe request
template and the max_scan_ie_len values at initialization.

Increased the size of probe request template
to the maximum size allowed by the firmware.
Struct wl12xx_probe_req_template, which was only used
for calculating the max size of the probe request template,
is no longer used and needed.

max_scan_ie_len is used for validating the size of
additional IEs in scan requests.
Initialized the max_scan_ie_len field to the maximum size
of the probe request template minus the ieee80211 header size.

Signed-off-by: Guy Eilam <guy@wizery.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-15 15:41:04 +02:00
Eliad Peller
c531277215 wl12xx: add auto-arp support
The auto-arp feature of wl12xx allows the firmware to automatically
response to arp requests asking for its ip.

in order to use it, we configure the arp response template and
enable the corresponding bit in wl1271_acx_arp_filter (along with
passing its ip)

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-15 15:04:56 +02:00
Roger Quadros
b69eb80bf7 wl1271_sdio_test: Add module for sdio RX/TX testing
This module enables individually generating RX and TX traffic
over the SDIO bus on which the WL1271 chipset is connected.
This is required to perform RF interference testing.

The module takes 2 module parameters 'rx' and 'tx'.

To generate RX traffic:
	modprobe wl1271_sdio_test rx=1
To generate TX traffic:
	modprobe wl1271_sdio_test tx=1

To generate both RX & TX traffic, set both rx and tx to 1.

You can change the testing configuration at runtime by changing
the rx & tx values at /sys/modules/wl1271_sdio_test/

To stop testing simply unload the module.

Signed-off-by: Roger Quadros <roger.quadros@nokia.com>
Reviewed-by: Carlos Chinea <carlos.chinea@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-15 15:03:17 +02:00
Luciano Coelho
fb6a6819fa wl12xx: disable 11a channels when wl->enable_11a is known
Disabling the 11a channels when not supported in the reg_notify function was
not working as it should, because when the driver is initiailizing (and
registering itself with mac80211), it would get the reg notification too
early.  At that point the driver wouldn't have received the NVS yet, so it
wouldn't know whether 11a was supported.

To fix this, we disable 11a channels when we read the NVS instead.  Also, it
is easier (and still safe) to set n_channels to zero instead of setting the
disabled flag on every 11a channel.

Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-15 15:00:00 +02:00
Juuso Oikarinen
1036dc169f wl12xx: Remove 11j channels from the supported channels list.
Because we don't support them at this stage.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-02 16:17:21 +02:00
Roger Quadros
870c367cf8 wl1271: Add wl1271_load_firmware() and export some functions
For the SDIO testing module we need to load the firmware but not
boot it. wl1271_load_firmware() is meant to do just the firmware loading part.

We also export some functions so they are usable in the testing module.

Signed-off-by: Roger Quadros <roger.quadros@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-02 16:17:20 +02:00
Luciano Coelho
43a598d5e4 wl12xx: fix illegal memset if debugfs is not enabled
If we try to reset the debugfs statistics when debugfs is not configured in
the kernel, we're memset an illegal pointer, because it has never been
allocated.  So check whether we have debugfs enabled by looking into the
wl->rootdir before trying to reset the fw_stats struct.

Reported-by: Joerie de Gram <j.de.gram@gmail.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-02 16:17:19 +02:00
Eliad Peller
d60080ae06 wl1271: move wl12xx debugfs directory to under wiphy's debugfs
Use per-device debugfs path, so multiple devices won't collide.

in order to use wl->hw->wiphy->debugfsdir, we have to move the debugfs
creation from wl1271_debugfs_init() to wl1271_register_hw().

Reported-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-02 16:17:11 +02:00
Eliad Peller
7cb2cea9f0 wl1271: use debugfs_remove_recursive
Documentation/filesystems/debugfs.txt:
"""
Once upon a time, debugfs users were required to remember the dentry pointer
for every debugfs file they created so that all files could be cleaned up.
We live in more civilized times now, though, and debugfs users can call:

    void debugfs_remove_recursive(struct dentry *dentry);
"""

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-12-02 16:16:52 +02:00
Juuso Oikarinen
2f6724b245 wl1271: Fix setting of the hardware connection monitoring probe-req template
The probe-request template used in the hardware connection monitoring feature
thus far has been an empty one, without the SSID IE and without supported rate
IEs. This causes problems with some AP's.

Additionally, after connected scans, the template for connection maintenance
would remain to be the one last used for scanning - potentially incorrect.

Fix these by getting a pre-filled directed probe-request template for the
associated-to AP from mac80211.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-11-26 15:33:41 +02:00
Luciano Coelho
573c67cf81 wl12xx: disable 11a channels when regulatory changes if 11a is not supported
Instead of simply not scanning for the 11a channels when not supported by the
hardware, disable the channels in reg_notify.  This centralizes the decision
on whether to scan 5GHz channel in one place and allows userspace to know
exactly which channels are in use.

Based on Juuso Oikarinen's idea.

Cc: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
Reviewed-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
2010-11-26 15:09:15 +02:00
Juuso Oikarinen
6735329934 wl12xx: Fix kernel crash related to hw recovery and interface shutdown
It is possible that the op_remove_interface function  is invoked exactly at
the same time has hw recovery is started. In this case it is possible for the
interface to be already removed in the op_remove_interface call, which
currently leads to a kernel warning and a subsequent kernel crash.

Fix this by ignoring the op_remove_interface call if the interface is already
down at that point.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Tested-by: Tuomas Katila <ext-tuomas.2.katila@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-11-23 10:29:29 +02:00
Juuso Oikarinen
b84a7d3d9e wl12xx: Unset bssid filter, ssid and bssid from firmware on disassoc
On the disassociation event from the mac80211, the wl12xx driver does not
clear the chipset configuration related to the AP - i.e. it does not perform
a DISCONNECT and then a JOIN with zero SSID and dummy BSSID. Also, it does not
unset the BSSID filter.

Often this is not a problem, as the above is performed upon entering idle
state. But if a scenario arises where a new association is attempted without
cycling through idle state, the new association will fail.

Fix this by resetting the firmware state on disassociation.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-11-22 16:45:14 +02:00
Arik Nemtsov
68d069c45f wl1271: add support for HW TX fragmentation
Indicate to mac80211 we support HW fragmentation.
Support updates of the fragmentation threshold via the
set_frag_threshold callback.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-11-22 16:45:13 +02:00
Juuso Oikarinen
fa97f46b30 Revert "wl1271: Change supported channel order for a more optimal scan"
This reverts commit fa21c7a9e4.

The reverted patch caused more harm than benefit.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Tested-by: Tuomas Katila <ext-tuomas.2.katila@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-11-22 16:45:12 +02:00
Juuso Oikarinen
b7417d930a wl1271: Prevent ad-hoc and active scanning on 11a DFS frequencies
The wl1271 does not support radar detection. Hence, prevent ad-hoc and
active scanning on frequencies requiring DFS.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Tested-by: Tuomas Katila <ext-tuomas.2.katila@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-11-22 16:45:11 +02:00
Gery Kahn
91433029e4 wl1271: cleanup unused code of calibration structures
The cleanup unused code for calibration procedures.

Signed-off-by: Gery Kahn <geryk@ti.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-11-22 16:45:10 +02:00
Shahar Levi
00d201001b wl1271: Change wl12xx Files Names
All files name prefix removed due to the fact that wl12xx driver supports
wl1271 and wl1273.
Also the definition in Kconfig and header files changed respectively.

Signed-off-by: Shahar Levi <shahar_levi@ti.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
2010-11-22 16:45:09 +02:00
Rafał Miłecki
a76a574ca9 ssb: drop BCM4328 hack for SPROM revision
This hacks leads to incorrect SPROM parsing for me and reading for example MAC
as: 00:00:00:54:00:00. Michael G. who introduced this confirmed it is not
needed anymore.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Tested-by: Michael Gerdau <mgd@qata.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-18 14:22:25 -05:00
Felix Fietkau
aaa13ca242 ath9k_hw: support reading calibration data from flash on AR9003
Embedded boards do not have compressed EEPROM data, they use the
struct ar9003_eeprom layout, with little endian fields, so copying
the raw data to the eeprom buffer is enough.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-18 14:22:24 -05:00
Felix Fietkau
a05b5d4504 ath9k: add support for reading eeprom from platform data on PCI devices
Some embedded boards store platform data for connected PCIe AR92xx
chips in the system flash instead of a separate EEPROM chip.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-18 14:22:23 -05:00
John W. Linville
458fafdd57 rndis_wlan: avoid uninitialized var warning in rndis_wlan_craft_connected_bss
CC [M]  drivers/net/wireless/rndis_wlan.o
drivers/net/wireless/rndis_wlan.c: In function ‘rndis_wlan_craft_connected_bss’:
drivers/net/wireless/rndis_wlan.c:2542:2: warning: ‘ret’ may be used uninitialized in this function

Signed-off-by: John W. Linville <linville@tuxdriver.com>
Acked-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
2010-11-18 14:22:22 -05:00
John W. Linville
8befba6f22 iwmc3200wifi: clarify potentially undefined operation in iwm_scan_ssids
CC [M]  drivers/net/wireless/iwmc3200wifi/commands.o
drivers/net/wireless/iwmc3200wifi/commands.c: In function ‘iwm_scan_ssids’:
drivers/net/wireless/iwmc3200wifi/commands.c:911:15: warning: operation on ‘iwm->scan_id’ may be undefined

Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-18 14:22:21 -05:00
Bruno Randolf
eef39befaa ath5k: Use generic EWMA library
Remove ath5k's private moving average implementation in favour of the generic
library version.

Signed-off-by: Bruno Randolf <br1@einfach.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-18 14:22:19 -05:00
Felix Fietkau
488f6ba75b ath9k_hw: add support for reading EEPROM data from the internal OTP ROM
Some of the new AR9003 cards do not come with an external EEPROM chip
anymore. Calibration data on these cards is stored in the OTP ROM on
the chip.
This patch adds support for reading this data, and also adds support
for different EEPROM chip sizes (512 bytes instead of 1K).

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:30 -05:00
Felix Fietkau
2d42efc44e ath9k: store frame information used by aggregation inside the skb tx info
Since the pointers after the rates in the tx info cannot be used anymore
after frames have been queued, this area can be used to store information
that was previously stored in the ath_buf. With these changes, we can delay
the ath_buf assignment in the aggregation code until aggregates are formed.

That will not only make it possible to simplify DMA descriptor setup to
do less rewriting of uncached memory, but will also make it easier to
move aggregation out of the core of the ath9k tx path.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:29 -05:00
Felix Fietkau
04caf86375 ath9k: more tx setup cleanups
- remove the BUF_HT flag, and instead check for IEEE80211_TX_CTL_AMPDU
  before calling ath_tx_send_ampdu.
- remove a few unused variables
- calculate frame length before adding the frame padding
- merge the misnamed ath_tx_start_dma function into ath_tx_start
- remove an unused argument for assign_aggr_tid_seqno

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:27 -05:00
Felix Fietkau
71a3bf3e94 ath9k: block new AMPDU sessions if SC_OP_TXAGGR is not set
This makes further tx path cleanups easier

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:25 -05:00
Felix Fietkau
28d1670862 ath9k: clean up code duplication around ath_tx_start
Merge initial processing for the CAB queue and regular tx.
Also move ath_tx_cabq() to beacon.c and make it static.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:23 -05:00
Felix Fietkau
c599261825 ath9k: remove bf_tx_aborted from struct ath_buf
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:21 -05:00
Felix Fietkau
76e4522177 ath9k: remove bfs_frmlen from struct ath_buf_state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:19 -05:00
Felix Fietkau
b572d0335f ath9k: remove bfs_nframes from struct ath_buf_state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:18 -05:00
Felix Fietkau
269c44bc84 ath9k: remove bfs_al from struct ath_buf_state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:16 -05:00
Felix Fietkau
3017047f56 ath9k: remove bfs_keyix from struct ath_buf_state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:14 -05:00
Felix Fietkau
82259b77f6 ath9k: remove bfs_paprd_timestamp from struct ath_buf_state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:12 -05:00
Felix Fietkau
952cd69371 ath9k: remove bfs_keytype from struct ath_buf_state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:09 -05:00
Felix Fietkau
5daefbd061 ath9k: remove bfs_tidno from struct ath_buf_state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:07 -05:00
Felix Fietkau
2d3bcba082 ath9k: remove bfs_seqno from struct ath_buf_state
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:05 -05:00
Felix Fietkau
9a6b827063 ath9k: fix PA predistortion training frame setup
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:03 -05:00
Felix Fietkau
c5d0855acf ath9k_hw: set default values for radar pulse detection
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:19:01 -05:00
RA-Jay Hung
387e688464 rt2x00: Modify rt2x00queue_remove_l2pad to make skb->data two-byte alignment
When send out skb data to mac80211, orignal code will cause mac80211
unaligned access, so modify code to make mac80211 can natural access.

Signed-off-by: RA-Jay Hung <jay_hung@ralinktech.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:59 -05:00
RA-Jay Hung
f8eaec659f rt2x00: Fix header_length in rt2x00lib_txdone
Put the assignment of header_length after pull out extra tx headroom

Signed-off-by: RA-Jay Hung <jay_hung@ralinktech.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:57 -05:00
RA-Jay Hung
b43d63bd69 rt2x00: Fix rt2800 USB TX Path DMA issue
rt2800usb chips need to add 1~3 bytes zero padding after each 802.11 header & payload,
and at the end need to add 4 bytes zero padding whether doing TX bulk aggregation or not,

TXINFO_W0_USB_DMA_TX_PKT_LEN in TXINFO must include 1-3 bytes padding after 802.11 header & payload
but do not include 4 bytes end zero padding.

In rt2800usb_get_tx_data_len do not consider multiple of the USB packet size case, sometimes this will
cause USB DMA problem.

Signed-off-by: RA-Jay Hung <jay_hung@ralinktech.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:55 -05:00
Gertjan van Wingerde
ef8397cfb3 rt2x00: Use ioremap for SoC devices instead of KSEG1ADDR.
Make the code a bit more portable to architectures that do not support
KSEG1ADDR.

Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Tested-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:54 -05:00
Gertjan van Wingerde
72c7296e03 rt2x00: Remove unneccessary internal Kconfig symbols.
CONFIG_RT2800PCI_PCI and CONFIG_RT2800PCI_SOC are strictly not needed
as we can check the dependent symbols directly in the rest of Kconfig
and the code, so clean up the Kconfig namespace a bit.

Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:51 -05:00
Gertjan van Wingerde
a6a8d66eba rt2x00: Remove RT30XX Kconfig variables.
Enabling of RT30xx devices via Kconfig variables was introduced when these
devices weren't properly supported yet.
Now that that they are properly supported and functional, we can remove these
Kconfig variables for RT30xx devices and simply enable them whenever rt2800pci
and/or rt2800usb is enabled.

Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Acked-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:50 -05:00
Gertjan van Wingerde
46af584d2e rt2x00: Clean up Kconfig for RT2800 devices.
General clean up of the Kconfig part for RT28XX devices.
Also remove the indications of non functional support for rt27xx/rt28xx/rt30xx
devices, as this is no longer true. They just work fine.
Finally, remove the experimental indications for rt27xx/rt28xx/rt30xx devices
as that is no longer true. Keep the experimental indications for rt33xx/rt35xx
devices, though.

Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Acked-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:48 -05:00
Gertjan van Wingerde
f93bc9b3ce rt2x00: Add initial support for RT3370/RT3390 devices.
Modified from Eddy's patch by adding the RT3370 USB support as well.

Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Cc: Eddy Tsai <Eddy_Tsai@ralinktech.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:47 -05:00
Ivo van Doorn
ae4ecb9f8f rt2x00: Increase REGISTER_BUSY_COUNT
For some hardware the REGISTER_BUSY_COUNT isn't sufficient,
increase the REGISTER_BUSY_COUNT to 100 to catch most
devices which have more problems with accessing the registers.

For normal operating devices nothing would change as they will
exit the loop early anyway.

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Acked-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-17 16:18:45 -05:00
Mohammed Shafi Shajakhan
28d9cc7f21 ath9k_htc: Use macro for caldata array size
The calibration data variable size is based on the number of
channels available in the ath9k driver.

Signed-off-by: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-16 16:39:09 -05:00