summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/files/drivers/net
Commit message (Collapse)AuthorAgeFilesLines
* generic: ar8316: allow to configure port 6 via platform data on AR8327juhosg2012-12-221-17/+18
| | | | | | Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34847 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: rename cpuport_cfg to port0_cfg in ar8327_platform_datajuhosg2012-12-221-1/+1
| | | | | | Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34846 3c298f89-4303-0410-b956-a3cf2f4a3e73
* [kernel] make to rtl8366_smi of binding use gpio_is_validblogic2012-12-211-1/+1
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34816 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: rtl836x: fix compiler warningsjuhosg2012-12-174-8/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CC drivers/net/phy/rtl8366rb.o In file included from drivers/net/phy/rtl8366s.c:16:0: include/linux/of_platform.h:106:13: warning: 'struct device' declared inside parameter list [enabled by default] include/linux/of_platform.h:106:13: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default] drivers/net/phy/rtl8366s.c: In function 'rtl8366s_probe': drivers/net/phy/rtl8366s.c:1094:2: warning: label 'err_out' defined but not used [-Wunused-label] drivers/net/phy/rtl8366s.c:1055:32: warning: unused variable 'pdata'[-Wunused-variable] CC drivers/net/phy/rtl8366rb.o In file included from drivers/net/phy/rtl8366rb.c:17:0: include/linux/of_platform.h:106:13: warning: 'struct device' declared inside parameter list [enabled by default] include/linux/of_platform.h:106:13: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default] drivers/net/phy/rtl8366rb.c: In function 'rtl8366rb_probe': drivers/net/phy/rtl8366rb.c:1214:2: warning: label 'err_out' defined but not used [-Wunused-label] drivers/net/phy/rtl8366rb.c:1175:32: warning: unused variable 'pdata'[-Wunused-variable] CC drivers/net/phy/rtl8367.o In file included from drivers/net/phy/rtl8367.c:15:0: include/linux/of_platform.h:106:13: warning: 'struct device' declared inside parameter list [enabled by default] include/linux/of_platform.h:106:13: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default] drivers/net/phy/rtl8367.c: In function 'rtl8367_probe': drivers/net/phy/rtl8367.c:1712:2: warning: label 'err_out' defined but not used [-Wunused-label] drivers/net/phy/rtl8367.c:1677:32: warning: unused variable 'pdata' [-Wunused-variable] CC drivers/net/phy/rtl8367b.o In file included from drivers/net/phy/rtl8367b.c:15:0: include/linux/of_platform.h:106:13: warning: 'struct device' declared inside parameter list [enabled by default] include/linux/of_platform.h:106:13: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default] drivers/net/phy/rtl8367b.c: In function 'rtl8367b_probe': drivers/net/phy/rtl8367b.c:1494:2: warning: label 'err_out' defined but not used [-Wunused-label] drivers/net/phy/rtl8367b.c:1459:32: warning: unused variable 'pdata' [-Wunused-variable] Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34731 3c298f89-4303-0410-b956-a3cf2f4a3e73
* linux: generic: rtl836*: fix compilation with !CONFIG_OFjogo2012-12-156-1/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fixes the following errors caused by r34682: CC [M] drivers/net/phy/rtl8366_smi.o In file included from drivers/net/phy/rtl8366_smi.c:26:0: drivers/net/phy/rtl8366_smi.h:149:46: warning: 'struct platform_device' declared inside parameter list [enabled by default] drivers/net/phy/rtl8366_smi.h:149:46: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default] drivers/net/phy/rtl8366_smi.c:1398:65: warning: 'struct platform_device' declared inside parameter list [enabled by default] drivers/net/phy/rtl8366_smi.c: In function 'rtl8366_smi_probe_plat': drivers/net/phy/rtl8366_smi.c:1400:44: error: dereferencing pointer to incomplete type drivers/net/phy/rtl8366_smi.c:1402:11: error: dereferencing pointer to incomplete type drivers/net/phy/rtl8366_smi.c:1403:16: error: dereferencing pointer to incomplete type drivers/net/phy/rtl8366_smi.c: At top level: drivers/net/phy/rtl8366_smi.c:1415:46: warning: 'struct platform_device' declared inside parameter list [enabled by default] drivers/net/phy/rtl8366_smi.c:1415:21: error: conflicting types for 'rtl8366_smi_probe' drivers/net/phy/rtl8366_smi.h:149:21: note: previous declaration of 'rtl8366_smi_probe' was here drivers/net/phy/rtl8366_smi.c: In function 'rtl8366_smi_probe': drivers/net/phy/rtl8366_smi.c:1420:31: error: dereferencing pointer to incomplete type drivers/net/phy/rtl8366_smi.c:1424:10: error: dereferencing pointer to incomplete type drivers/net/phy/rtl8366_smi.c:1425:3: warning: passing argument 1 of 'rtl8366_smi_probe_of' from incompatible pointer type [enabled by default] drivers/net/phy/rtl8366_smi.c:1392:19: note: expected 'struct device_node *' but argument is of type 'struct platform_device *' drivers/net/phy/rtl8366_smi.c:1427:3: warning: passing argument 1 of 'rtl8366_smi_probe_plat' from incompatible pointer type [enabled by default] drivers/net/phy/rtl8366_smi.c:1398:5: note: expected 'struct platform_device *' but argument is of type 'struct platform_device *' drivers/net/phy/rtl8366_smi.c: At top level: drivers/net/phy/rtl8366_smi.c:1438:1: error: conflicting types for 'rtl8366_smi_probe' drivers/net/phy/rtl8366_smi.h:149:21: note: previous declaration of 'rtl8366_smi_probe' was here make[7]: *** [drivers/net/phy/rtl8366_smi.o] Error 1 make[6]: *** [drivers/net/phy] Error 2 make[5]: *** [drivers/net] Error 2 make[4]: *** [drivers] Error 2 Signed-off-by: Jonas Gorski <jogo@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34703 3c298f89-4303-0410-b956-a3cf2f4a3e73
* [kernel] make rtl8366 driver OF capableblogic2012-12-156-66/+121
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34682 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: set delay values for SGMII mode on AR8327juhosg2012-11-231-0/+14
| | | | | | Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34315 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: introduce ar8216_mib_op helperjuhosg2012-11-221-26/+9
| | | | | | | | | | | | | The ar8216_mib_{capture,flush} functions are similar. Move the common code into a helper and use that from the original functions. This change also fixes a lockdep warning in ar8216_mib_flush. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34297 3c298f89-4303-0410-b956-a3cf2f4a3e73
* swconfig: make it compatible with 3.7juhosg2012-11-211-3/+3
| | | | | | | | | | | | | | | | | | | swconfig does not compile with 3.7 because struct netlink_notify->pid has been renamed to struct netlink_notify->portid and struct genl_info->snd_pid has been renamed to struct genl_info->snd_portid Use the new names and add compatibility patches to 3.3 and 3.6. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34288 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: fix port number check in 'ar8xxx_mib_work_func'juhosg2012-11-201-1/+3
| | | | | | | | Also add a WARN_ON to 'ar8216_mib_fetch_port_stat' Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34283 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: remove an unblanced mutex_unlock calljuhosg2012-11-201-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes the following warning: [ 94.080000] [ 94.080000] ===================================== [ 94.080000] [ BUG: bad unlock balance detected! ] [ 94.080000] 3.3.8 #2 Tainted: G O [ 94.080000] ------------------------------------- [ 94.080000] swconfig/1220 is trying to release lock (&priv->mib_lock) at: [ 94.080000] [<801df8f4>] ar8216_sw_get_port_mib+0x138/0x16c [ 94.080000] but there are no more locks to release! [ 94.080000] [ 94.080000] other info that might help us debug this: [ 94.080000] 2 locks held by swconfig/1220: [ 94.080000] #0: (genl_mutex){+.+...}, at: [<80222430>] genl_rcv+0x14/0x34 [ 94.080000] #1: (&dev->sw_mutex){+.+...}, at: [<801da018>] swconfig_get_dev+0x88/0xb4 [ 94.080000] [ 94.080000] stack backtrace: [ 94.080000] Call Trace: [ 94.080000] [<8028dc58>] dump_stack+0x8/0x34 [ 94.080000] [<800a5128>] print_unlock_inbalance_bug+0xe0/0xfc [ 94.080000] [<800a82c0>] lock_release+0x18c/0x1c8 [ 94.080000] [<80292074>] __mutex_unlock_slowpath+0xd8/0x17c [ 94.080000] [<801df8f4>] ar8216_sw_get_port_mib+0x138/0x16c [ 94.080000] [<801db688>] swconfig_get_attr+0xbc/0x394 [ 94.080000] [<8022261c>] genl_rcv_msg+0x1cc/0x214 [ 94.080000] [<80221a18>] netlink_rcv_skb+0x6c/0xe8 [ 94.080000] [<80222440>] genl_rcv+0x24/0x34 [ 94.080000] [<80221370>] netlink_unicast+0x15c/0x22c [ 94.080000] [<8022175c>] netlink_sendmsg+0x240/0x2d0 [ 94.080000] [<801ef544>] sock_sendmsg+0x84/0x9c [ 94.080000] [<801f0648>] __sys_sendmsg+0x1cc/0x270 [ 94.080000] [<801f207c>] sys_sendmsg+0x48/0x7c [ 94.080000] [<8006ad78>] stack_done+0x20/0x40 [ 94.080000] Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34282 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add missing locking callsjuhosg2012-11-201-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes the following lockdep warning: [ 19.160000] ------------[ cut here ]------------ [ 19.160000] WARNING: at drivers/net/phy/ar8216.c:322 ar8216_rmw+0x54/0xa4() [ 19.170000] Modules linked in: nf_defrag_ipv4 nf_conntrack ehci_hcd sd_mod pppox ipt_REJECT xt_TCPMSS ipt_LOG xt_comment xt_multip ort xt_mac xt_limit iptable_mangle iptable_filter ip_tables xt_tcpudp x_tables ppp_async ppp_generic slhc ath9k(O) ath9k_common(O) at h9k_hw(O) ath(O) mac80211(O) usbcore usb_common scsi_mod nls_base crc7 crc_itu_t crc_ccitt cfg80211(O) compat(O) arc4 aes_generic cry pto_blkcipher cryptomgr aead crypto_hash crypto_algapi ledtrig_timer ledtrig_default_on leds_gpio gpio_button_hotplug(O) [ 19.210000] Call Trace: [ 19.220000] [<8028dc38>] dump_stack+0x8/0x34 [ 19.220000] [<80072da0>] warn_slowpath_common+0x78/0xa4 [ 19.230000] [<80072de4>] warn_slowpath_null+0x18/0x24 [ 19.230000] [<801de820>] ar8216_rmw+0x54/0xa4 [ 19.240000] [<801df460>] ar8216_mib_capture+0x70/0xd0 [ 19.240000] [<801df944>] ar8xxx_mib_work_func+0x34/0x98 [ 19.250000] [<80089a7c>] process_one_work+0x28c/0x460 [ 19.250000] [<8008a630>] worker_thread+0x22c/0x334 [ 19.260000] [<8008e544>] kthread+0x88/0x90 [ 19.260000] [<80065020>] kernel_thread_helper+0x10/0x18 [ 19.270000] [ 19.270000] ---[ end trace 22e9d696adfa6a08 ]--- Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34281 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add MIB counter support for the AR8216 switch as welljuhosg2012-11-182-1/+89
| | | | | | | | Thanks to Jonas Gorski for the reference URL. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34245 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: rename AR8216_*_STATS_* definesjuhosg2012-11-182-82/+82
| | | | | | | | | | | The names are misleading, those are only valid from AR8236. The AR8216 chip uses different offsets. Thanks to Jonas Gorski for the report. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34244 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic ar8216: allow to read/reset MIB counters via swconfigjuhosg2012-11-182-7/+492
| | | | | | Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34243 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: use dynamically allocated private data in ar8216_probejuhosg2012-11-181-3/+12
| | | | | | Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34242 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: swconfig: use led_set_brightness in LED control codejuhosg2012-10-261-2/+2
| | | | | | | | | | | The 'led_brightness_set' function has been renamed to 'led_set_brightness' in recent ernels. Use the new name and add a compatibility patch for 3.3. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33946 3c298f89-4303-0410-b956-a3cf2f4a3e73
* [kernel] swconfig: get rid of the NLA_PUT_* macrosflorian2012-10-241-17/+33
| | | | | | | Upstream kernel 3.6 has removed this usage, use the plain functions directly as intended. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33906 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: add driver for the the RTL8367R{B,-VB} switchesjuhosg2012-10-181-0/+1546
| | | | | | Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33839 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: rtl8366_smi: increase delay after switch hw resetjuhosg2012-08-101-3/+6
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33077 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: rtl836x: add hw_reset field to struct rtl8366_smijuhosg2012-08-025-2/+32
| | | | | | | It will be used to start/stop the switch if that is supported by the given board. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32943 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: rtl8366_smi: use __rtl8366_smi_cleanup instead of gpio_free callsjuhosg2012-08-021-2/+1
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32942 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: start aneg on each PHY of the AR8327juhosg2012-07-051-1/+13
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32604 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: allow to configure AR8327 LEDs via platform datajuhosg2012-06-192-1/+24
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32456 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add revision specific PHY fixups for AR8327juhosg2012-05-292-8/+41
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32000 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: replace chip_type field with chip_{ver,rev} in ar8216_privjuhosg2012-05-292-31/+25
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31999 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add chip_is_ar8{216,236,316,327} helpersjuhosg2012-05-291-8/+28
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31998 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: rtl8367: rename a misnamed variablejuhosg2012-05-271-2/+2
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31917 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: rtl8366_smi: remove duplicated spinlock initializationjuhosg2012-05-271-2/+0
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31916 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: rtl8366_smi: rename debugfs Kconfig symboljuhosg2012-05-272-5/+5
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31915 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: rtl8367: allow to use VLANs > 31juhosg2012-05-271-0/+3
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31914 3c298f89-4303-0410-b956-a3cf2f4a3e73
* kernel: rewrite the phy packet hook, put it in the network stack to avoid ↵nbd2012-05-062-103/+37
| | | | | | having to keep non-upstream ethernet driver changes git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31637 3c298f89-4303-0410-b956-a3cf2f4a3e73
* atheros: update to 3.3.4 (based on work by acoul), fix mvswitch driver for ↵nbd2012-05-061-15/+3
| | | | | | newer kernels git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31625 3c298f89-4303-0410-b956-a3cf2f4a3e73
* linux: rtl836x: add a generic reset_switch functionjuhosg2012-04-295-76/+29
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31536 3c298f89-4303-0410-b956-a3cf2f4a3e73
* linux: rtl836x: rename rtl836*_hw_init to rtl836*_setupjuhosg2012-04-293-21/+6
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31535 3c298f89-4303-0410-b956-a3cf2f4a3e73
* linux: rtl836x: add a reset_chip callback to rtl8366_smi_opsjuhosg2012-04-295-24/+11
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31534 3c298f89-4303-0410-b956-a3cf2f4a3e73
* ar8216: enable forwarding of multicast frames to the cpu port on ar8327 ↵nbd2012-04-221-0/+1
| | | | | | (thx, SeG) git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31441 3c298f89-4303-0410-b956-a3cf2f4a3e73
* [ar8216] fixes breakage introduced in 776722ce36ac95877efb7fd771dde2f6ffc96433blogic2012-03-221-2/+2
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31054 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add support for the AR8327 chipjuhosg2012-03-182-2/+464
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31011 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: allow to use more portsjuhosg2012-03-181-2/+3
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31010 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: reorder chip specific functionsjuhosg2012-03-181-72/+72
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31009 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: reorder switch_dev specific functionsjuhosg2012-03-181-218/+216
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31008 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: use ar8216_sw_ prefix for switchdev related functionsjuhosg2012-03-181-29/+29
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31007 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: use switch_dev->ports in for loopsjuhosg2012-03-181-6/+6
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31006 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add read_port_status field to ar8xxx_chipjuhosg2012-03-181-1/+11
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31005 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add init_globals field to ar8xxx_chipjuhosg2012-03-181-21/+30
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31004 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add caps field to ar8xxx_chipjuhosg2012-03-181-5/+19
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31003 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add vtu_load_vlan field to ar8xxx_chipjuhosg2012-03-181-4/+15
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31002 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add vtu_flush field to ar8xxx_chipjuhosg2012-03-181-1/+11
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31001 3c298f89-4303-0410-b956-a3cf2f4a3e73
* generic: ar8216: add init_port field to ar8xxx_chipjuhosg2012-03-181-4/+22
| | | | git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31000 3c298f89-4303-0410-b956-a3cf2f4a3e73