1
Commit Graph

101 Commits

Author SHA1 Message Date
Herbert Xu
364c6badde [NET]: Clean up skb_linearize
The linearisation operation doesn't need to be super-optimised.  So we can
replace __skb_linearize with __pskb_pull_tail which does the same thing but
is more general.

Also, most users of skb_linearize end up testing whether the skb is linear
or not so it helps to make skb_linearize do just that.

Some callers of skb_linearize also use it to copy cloned data, so it's
useful to have a new function skb_linearize_cow to copy the data if it's
either non-linear or cloned.

Last but not least, I've removed the gfp argument since nobody uses it
anymore.  If it's ever needed we can easily add it back.

Misc bugs fixed by this patch:

* via-velocity error handling (also, no SG => no frags)

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2006-06-17 21:30:16 -07:00
Olaf Hering
b0b8dab288 [PATCH] mv643xx_eth: provide sysfs class device symlink
On Sat, Mar 11, Olaf Hering wrote:
> Why is the /sys/class/net/eth0/device symlink not created for the
> mv643xx_eth driver? Does this work for other platform device drivers?
> Seems to work for the ps2 keyboard at least.

The SET_NETDEV_DEV has to be done before a call to register_netdev.  With
the new patch below, the device symlink for the platform device was
created.  Unfortunately, after the 4 ls commands, the network connection
died.  No idea if the box crashed or if something else broke, lost remote
access.

Provide sysfs 'device' in /class/net/ethN Also, set module owner field,
like pcnet32 driver does.

Signed-off-by: Olaf Hering <olh@suse.de>
Acked-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-05-02 15:18:54 -04:00
Dale Farnsworth
94843566d7 [PATCH] mv643xx_eth: Fix tx_timeout to only conditionally wake tx queue
After resetting the hardware on a tx_timeout, call netif_wake_queue()
only if we have free tx descriptors.

Also, attempt to recover if mv643xx_eth_start_xmit() is called when
there are fewer free tx descriptors than expected.

The BUG_ON() call we are replacing was hit on a tx_timeout that
called netif_wake_queue(), indirectly via netif_device_attach(),
even though we did not have enough free tx descriptors.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-04-12 18:11:23 -04:00
Brent Cook
5c53740877 [PATCH] mv643xx_eth: Always free completed tx descs on tx interrupt
Fix the tx interrupt handler to free completed tx descriptors even
when NAPI is enabled.  Otherwise, the tx queue would fill up resulting
in poor performance and "NETDEV WATCHDOG: <iface>: transmit timed out"
messages.

Signed-off-by: Brent Cook <bcook@bpointsys.com>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-04-12 18:11:23 -04:00
Dale Farnsworth
f78fb4743d [PATCH] mv643xx_eth: Remove non-working feature: task level rx queue refill
The task level rx queue refill feature hasn't ever worked
(at least in 2.6) and is of dubious value.  Remove it.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-03-03 12:12:37 -05:00
Dale Farnsworth
468d09f894 [PATCH] mv643xx_eth: Clean up interrupt handling
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-03-03 12:12:37 -05:00
Dale Farnsworth
7303fde88a [PATCH] mv643xx_eth: Move #defines of constants to mv643xx_eth.h
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-03-03 12:12:36 -05:00
Dale Farnsworth
ff561eef9f [PATCH] mv643xx_eth: Refactor/clean up tx queue handling
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-03-03 12:12:36 -05:00
Dale Farnsworth
c8aaea25e0 [PATCH] mv643xx_eth: Refactor tx command queuing code
Simplify and remove redundant code for filling transmit descriptors.
No changes in features; it's just a code reorganization/cleanup.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-03-03 12:12:36 -05:00
Dale Farnsworth
12a87c644a [PATCH] mv643xx_eth: Rename "channels" to "queues"
Use better terminology for HW queues.  No functional changes.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-03-03 12:12:36 -05:00
Dale Farnsworth
e38fd1a055 [PATCH] mv643xx_eth: Fix misplaced parenthesis in mv643xx_eth_port_disable_rx
This bug could result in a system hang.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-03-03 12:12:36 -05:00
Dale Farnsworth
d5f9558a77 [PATCH] mv643xx_eth: Remove duplicate includes of linux/in.h and linux/ip.h
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-03-03 12:12:36 -05:00
Jeff Garzik
70c07e0262 Merge branch 'viro' 2006-02-09 14:17:05 -05:00
Al Viro
b6298c22c5 [PATCH] missing includes in drivers/net/mv643xx_eth.c
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2006-02-07 20:56:52 -05:00
Dale Farnsworth
01999873a4 [PATCH] mv643xx_eth: Clean up platform_data configuration
We shouldn't expose the hardware register contents in platform_data.
The only things we allow the user to configure are autoneg, speed, and
duplex.  Add specific platform_data fields for these values and remove
the registers configs.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:11:16 -05:00
James Chapman
d0412d9670 [PATCH] mv643xx_eth: use MII library for ethtool functions
Use the common ethtool support functions of the MII library.
Add generic MII ioctl handler.
Add PHY parameter speed/duplex/negotiation initialization and modification.

Signed-off-by: James Chapman <jchapman@katalix.com>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:11:16 -05:00
James Chapman
c28a4f8947 [PATCH] mv643xx_eth: use MII library for PHY management
Modify link up/down handling to use the functions from the MII
library.  Note that I track link state using the MII PHY registers
rather than the mv643xx chip's link state registers because I think
it's cleaner to use the MII library code rather than writing local
driver support code. It is also useful to make the actual MII
registers available to the user with maskable kernel printk messages
so the MII registers are being read anyway

Signed-off-by: James Chapman <jchapman@katalix.com>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:11:16 -05:00
Dale Farnsworth
9f8dd31945 [PATCH] mv643xx_eth: Make port queue enable/disable code consistent
Add and use the following functions:
	mv643xx_eth_port_enable_tx()
	mv643xx_eth_port_enable_rx()
	mv643xx_eth_port_disable_tx()
	mv643xx_eth_port_disable_rx()

so that ports are enabled/disabled consistently.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:11:16 -05:00
Dale Farnsworth
f98e36f1f7 [PATCH] mv643xx_eth: Rename mp->tx_ring_skbs to mp->tx_desc_count
tx_ring_skbs is actually a count of tx descriptors currently in use.
Since there may be multiple descriptors per skb, it is not the
same as the number of skbs in the ring.

Also change rx_ring_skbs to rx_desc_count to be consistent.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:11:16 -05:00
Dale Farnsworth
cf4086c772 [PATCH] mv643xx_eth: Merge unicast and multicast address filtering code
Remove duplicated code by having unicast and multicast code use
a common filter table function: eth_port_set_filter_table_entry().

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:11:16 -05:00
Dale Farnsworth
ed9b5d4576 [PATCH] mv643xx_eth: Remove needless mp->port_mac_addr
mp->port_mac_addr is just a redundant copy of dev->dev_addr, so remove it.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:11:16 -05:00
Dale Farnsworth
b4de9051a9 [PATCH] mv643xx_eth: Whitespace cleanup
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:09:24 -05:00
Paolo Galtieri
12ad74f88f [PATCH] mv643xx_eth: Update dev->last_rx on packet receive
Update dev->last_rx on packet receive

This fix corrects errors seen during configuration of the bonding driver.

Signed-off-by: Paolo Galtieri <pgaltieri@mvista.com>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:09:24 -05:00
Dale Farnsworth
c7cd9014e6 [PATCH] mv643xx_eth: Fix spinlock recursion bug
This patch eliminates a spinlock recursion bug introduced recently.
Since eth_port_send() is always called with the lock held, we simply
remove the locking inside the function itself.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 11:09:24 -05:00
Dale Farnsworth
c2e5b352fc [PATCH] mv643xx_eth: Remove needless mask of extended intr register
All interrupts controlled by the extended mask register are also
masked by a bit in the main mask register, so there is no need to
directly manipulate the extended mask register.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |   81 ++++++++++++++++++----------------------------------------
 1 file changed, 26 insertions(+), 55 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:39 -05:00
Dale Farnsworth
ab4384a658 [PATCH] mv643xx_eth: Merge open and stop helper functions
Move code from helper functions mv643xx_eth_real_open and mv643xx_eth_real_stop
as they are no longer needed.

Signed-off-by Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |  109 +++++++++++++++++++++++-----------------------------------
 1 file changed, 45 insertions(+), 64 deletions(-)

Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:38 -05:00
Dale Farnsworth
4476e0e4c7 [PATCH] mv643xx_eth: Fix transmit skb accounting
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:38 -05:00
Wolfram Joost
63890576a3 [PATCH] mv643xx_eth: Request HW checksum generation only for IPv4
This patch removes the NETIF_F_HW_CSUM flag to be able to use other protocols
than IPv4. Hardware checksums for IPv4 should continue to work because
NETIF_F_IP_CSUM is still set.  The sanity-check has been enhanced to check
the used protocol and to not access skb->iph for non-ipv4-packets.

Signed-off-by: Wolfram Joost <pegasos@frokaschwei.de>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |   19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:38 -05:00
Dale Farnsworth
8f5187035a [PATCH] mv643xx_eth: Hold spinlocks only where needed
This driver has historically held a spin_lock during the entire open
and stop functions and while receiving multiple packets.  This is
unecessarily long and holds locks during calls that may sleep.
This patch reduces the size of windows where locks are held.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |  172 ++++++++++++++++++++++++++++++----------------------------
 1 file changed, 91 insertions(+), 81 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:38 -05:00
Dale Farnsworth
dd09b1de08 [PATCH] mv643xx_eth: iounmap the correct SRAM buffer
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:37 -05:00
Paul Janzen
f7ea333765 [PATCH] mv643xx_eth: Fix handling of small, unaligned fragments
Fix handling of small, unaligned fragments.
It also solves a potential deadlock if skb_linearize() returns -ENOMEM.

Signed-off-by: Paul Janzen <pcj@linux.sez.to>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |   54 +++++++++++++++++++++++++++++++-----------------------
 1 file changed, 31 insertions(+), 23 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:37 -05:00
Dale Farnsworth
b44cd57262 [PATCH] mv643xx_eth: Receive buffers require 8 byte alignment
The Marvell mv643xx ethernet hardware requires that DMA buffers be
aligned to 8-byte boundaries.  This patch satisfies this requirement.
Buffers allocated by dev_alloc_skb() only have 4-byte alignment when
slab debugging is enabled.

Also, document that the 2-byte offset to align the IP packets on
receive is a hardware feature and is not tied to NET_IP_ALIGN.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:37 -05:00
Dale Farnsworth
16e0301831 [PATCH] mv643xx_eth: Add multicast support
This code is adapted from code in a ppc-specific version of the driver.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |  201 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 197 insertions(+), 4 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:37 -05:00
Paolo Galtieri
4eaa3cb35b [PATCH] mv643xx_eth: Fix a NULL pointer dereference
Fix a NULL pointer dereference.

Fill in the buf_ptr and byte_cnt fields of pkt_info in
eth_tx_return_desc().

Signed-off-by: Paolo Galtieri <pgaltieri@mvista.com>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |   51 +++++++++++++++++++++------------------------------
 1 file changed, 21 insertions(+), 30 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:37 -05:00
Paolo Galtieri
cb415d3004 [PATCH] mv643xx_eth: Fix dma_map/dma_unmap relations
If you do a dma_map_single you must do dma_unmap_single and if you do
a dma_map_page you must do a dma_unmap_page.

Signed-off-by: Paolo Galtieri <pgaltieri@mvista.com>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |   51 +++++++++++++++++++++------------------------------
 1 file changed, 21 insertions(+), 30 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:36 -05:00
Olaf Hering
78a5e53475 [PATCH] mv643xx_eth: 2.6.16 needs ip.h and in.h
Signed-off-by: Olaf Hering <olh@suse.de>
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>

 mv643xx_eth.c |    2 ++
 1 file changed, 2 insertions(+)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-17 07:23:36 -05:00
Olaf Hering
3bb8a18ae8 [PATCH] remove bouncing mail address of mv643xx_eth maintainer
Remove bouncing mail address of mv643xx maintainer.

Signed-off-by: Olaf Hering <olh@suse.de>
Cc: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-09 10:54:48 -05:00
Russell King
3ae5eaec1d [DRIVER MODEL] Convert platform drivers to use struct platform_driver
This allows us to eliminate the casts in the drivers, and eventually
remove the use of the device_driver function pointer methods for
platform device drivers.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
2005-11-09 22:32:44 +00:00
Linus Torvalds
4fd5f8267d Merge master.kernel.org:/home/rmk/linux-2.6-drvmodel
Manual #include fixups for clashes - there may be some unnecessary
2005-10-31 07:32:56 -08:00
Russell King
d052d1beff Create platform_device.h to contain all the platform device details.
Convert everyone who uses platform_bus_type to include
linux/platform_device.h.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
2005-10-29 19:07:23 +01:00
Nicolas DET
b1529871f4 [PATCH] mv643xx_eth_showsram: Added information message when using the SRAM
Added information message when using the SRAM in mv643xx_eth_probe()

Signed-off-by: Nicolas DET <det.nicolas@free.fr>
Signed-off-by: Sven Luther <sl@bplan-gmbh.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2005-10-29 14:51:53 +10:00
Ingo Molnar
a9f6a0dd54 [PATCH] more SPIN_LOCK_UNLOCKED -> DEFINE_SPINLOCK conversions
This converts the final 20 DEFINE_SPINLOCK holdouts.  (another 580 places
are already using DEFINE_SPINLOCK).  Build tested on x86.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-09-09 14:03:48 -07:00
Dale Farnsworth
63c9e54914 [PATCH] mv643xx: add netpoll api support
Add support for the netpoll api for use by netconsole, kgdb, etc.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2005-09-05 18:08:30 -04:00
Dale Farnsworth
7342cd810c [PATCH] mv643xx: Fix promiscuous mode handling
mv643xx_eth_get_config_reg() was reading the wrong register.
mv643xx_eth_set_config_reg() was or'ing instead of setting the
register.  These functions are trivial and both are called only from
mv643xx_eth_set_rx_mode() when changing to/from promiscuous mode.
Remove both functions and do the operations directly in
mv643xx_eth_set_rx_mode().

Also, maintain promiscuous mode setting across port resets.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2005-09-05 18:08:30 -04:00
Dale Farnsworth
8f543718ea [PATCH] mv643xx: Disable per port bandwidth limits
The mv643xx chips support per port bandwith limits.  This patch
disables the bandwidth limits by clearing the MTU register.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2005-09-05 18:08:30 -04:00
Dale Farnsworth
b111ceb68a [PATCH] mv643xx: fix outstanding tx skb counter
This patch corrects the accounting of outstanding tx skbs.  It fixes
a bug that causes "Error on Queue Full" messages seen since scatter-gather
was enabled by using the hardware tcp/udp checksum generator.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2005-09-05 18:08:30 -04:00
Dale Farnsworth
b1dd9ca177 [PATCH] mv643xx: fix skb memory leak
This patch fixes an skb memory leak under heavy receive load
(whenever the more packets have been received than the NAPI budget
allows to be processed).

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2005-09-05 18:08:30 -04:00
Dale Farnsworth
2600636065 [PATCH] mv643xx: add workaround for HW checksum generation bug
[PATCH] [NET] mv643xx: add workaround for HW checksum generation bug

The hardware checksum generator on the mv64xxx occasionally generates
an incorrect checksum.  This patch works around the issue and enables
hardware checksum generation.

Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2005-08-23 00:51:34 -04:00
Al Viro
dc074a8a32 [PATCH] ppc iomem annotations: mv643xx_eth
void * __iomem replaced with intended void __iomem *.

Signed-off-by: Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-25 07:55:58 -07:00
Benjamin Herrenschmidt
16b817579f [PATCH] ppc32: MV643XX ethernet is an option for Pegasos
This patch allows Kconfig to build the MV643xx ethernet driver on Pegasos
(CONFIG_PPC_MULTIPLATFORM) and adds what I think is a missing fix from
Dale's batch, that is remove SA_INTERRUPT and add SA_SHIRQ in there as the
interrupt is shared if I understand things correctly.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Fabio Massimo Di Nitto <fabbione@ubuntu.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 15:24:30 -07:00
Linus Torvalds
1da177e4c3 Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.

Let it rip!
2005-04-16 15:20:36 -07:00