Commit Graph

53128 Commits

Author SHA1 Message Date
mrg
a8fdd2914b move the include sys/types.h xor stdbool.h to the top of the file,
so that "bool" will be present when used later in the file.
2011-04-13 06:29:30 +00:00
mrg
1ed2588de8 re-include sparc64/sparc64/intreg.h in kernel mode. it's necessary. 2011-04-13 03:40:00 +00:00
mrg
bac0b9ea90 export a bunch of things to _KMEMUSER as well.
XXX: should consolidate the curcpu/curlwp definitions.
2011-04-13 03:35:19 +00:00
mrg
1b8d9011dd port to userspace. this needs db_user.h, stddef.h, stdbool.h and not
promlib.h.  put db_read/write_bytes() under _KERNEL.

XXX: for now, provide an empty db_machine_command_table[].

XXX2: this file puts a lot of it under #ifdef DDB, but i'm not sure
why this is done.  for now it makes it easier to port to userspace :)
2011-04-13 03:34:37 +00:00
mrg
9cd3a0ce28 port to userspace. needs <stdbool.h>, <sys/cpu.h>. delete unused
ULOAD().  implement KLOAD() in terms of db_read_bytes() in userspace.
can't use proc_find_raw() in userspace; disable this functionality
for now.  use db_printf().
2011-04-13 03:32:28 +00:00
mrg
4610955cd4 apply s/TRUE/true/; s/FALSE/false/;. needed for userland. 2011-04-13 03:29:03 +00:00
mrg
769de4c56a this needs db_user.h and stdlib.h in userland. 2011-04-13 03:25:35 +00:00
mrg
e090cbd477 install <machine/intr.h> for crash(8).
(we could avoid this, but it would require a lot of contortions that
make the header files ugly.  maybe someone else can figure out a less
ugly way of doing this later.)
2011-04-13 03:24:28 +00:00
mrg
68a527ebb7 this needs sys/types.h in userspace. 2011-04-13 03:22:49 +00:00
matt
26d2331fcb Add prototypes for mipsNN_cp0_watch{lo,hi}_{read,write} 2011-04-12 22:54:31 +00:00
matt
e3051ddc13 Add mipsNN_cp0_watch{lo,hi}_{read,write} 2011-04-12 22:50:33 +00:00
matt
a4abc0e6c7 Get rid of an errant KASSERT 2011-04-12 18:53:23 +00:00
matt
3d6322997b Dont bother taking out TLBINFO lock in pmap_tlb_asid_deactivate since the
atomic ops will DTRT with it.  Remove spl calls too.
2011-04-12 18:39:38 +00:00
matt
339f90a29b Add __lwp_getprivate_fast 2011-04-12 18:24:28 +00:00
ahoka
4bac4d7a0b avoid a crash when the display size is reported as 1x1
XXX this is hackish, it should be properly fixed instead
2011-04-12 18:10:15 +00:00
ahoka
316bee4dc6 add NAND_BBT 2011-04-12 18:09:11 +00:00
matt
6a9b230111 Add a CHMU handler to implement __lwp_getprivate_fast. 2011-04-12 18:07:57 +00:00
tsutsui
f84f67c9f4 Make x68k bootloader to use MI libsa, libkern, and libz Makefiles in
src/sys/lib dirs for maintainability.  Tested on X68030, ok from isaki@.
2011-04-12 14:07:35 +00:00
mrg
95134ba1e2 make sparc/frame.h idempotent. 2011-04-12 07:54:16 +00:00
cegger
448664b81b previous fix does not work if there is exactly only one entry where continue
exits the loop.
Apply fix from Konrad Wilke on port-xen@
That makes NetBSD DomU boot on Linux Dom0 with xl.
2011-04-12 05:09:32 +00:00
matt
d1d3b528a7 Make sure we init MIPS COP0 OSSCRATCH for UP as well as for MP. 2011-04-12 00:21:10 +00:00
matt
b784b74964 Add code to fixup the text segment to replace loads
from L_CPU(MIPS_CURLWP) or curlwp->l_cpu with
loads from COP0 register OSSCRATCH.
2011-04-11 23:12:41 +00:00
rmind
7742d02d14 G/C unused MUTEX_COUNT_BIAS (it was for VAX) 2011-04-11 19:11:08 +00:00
phx
fbb77c10f3 Enable strtc(4). Should theoretically work.
It works indeed for my DSM-G600 after I removed the battery. But there
must be something which confuses the chip later on...
2011-04-11 18:02:11 +00:00
tsutsui
7c1e72a72b Use bsd.klinks.mk to create machine and ${MACHINE_ARCH} symlinks. 2011-04-11 15:20:30 +00:00
cegger
ae26631de3 Continue scanning for other frontends when initialization
of one frontend failed. Bug reported by Konrad Wilk on port-xen@.
Fix this for all error pathes within the loop.
2011-04-11 15:00:49 +00:00
tsutsui
aedf074cc2 Some KNF. No binary change. 2011-04-11 14:00:02 +00:00
tsutsui
972813450e Bump version to denote serial console fix. 2011-04-11 13:49:41 +00:00
tsutsui
b9b2defb4b Add missing breaks. No need to output to SERIAL on ITE console. 2011-04-11 13:48:32 +00:00
tsutsui
bbc0dfc7e6 Fix pasto. Now serial console output on bootloader works properly
after ~decade.  ok from minoura@
2011-04-11 13:47:16 +00:00
mrg
4caa7539e8 remove DB_AOUT_SYMBOLS. 2011-04-11 10:41:17 +00:00
cegger
d13fff3778 build xen kernels again after db_trace merge 2011-04-11 08:56:17 +00:00
mrg
07a98cd33f obsolete DB_AOUT_SYMBOLS. however, we need to leave most of the code
in db_sym.[ch] as it is used by the elf version of crash(8).

i will be cleaning up the db_sym.c code in a follow up commit to avoid
having dead code compiled.
2011-04-11 04:22:30 +00:00
christos
7e80a5d1f8 something ate my / 2011-04-10 20:38:37 +00:00
christos
a640264e31 Merge db_trace for x86. From: Vladimir Kirillov proger at wilab dot org dot ua 2011-04-10 20:36:48 +00:00
phx
ed97e369f2 Missing comma. Make it compile again. 2011-04-10 16:30:32 +00:00
tsutsui
ef54da0a01 Fix hangup on the first floppy access since 2008.
Problem was reported by isaki@.

On X680x0 (and most other machines other than ISA FDC),
the ready line from FDD is connected to FDC and fdc driver can
be notified of the ready state after fd_set_motor() by interrupts.
In this case no need to use callout(9) to wait the FDD motor stabilized,
and the callout(9) method used in ISA fdc(4) driver rather caused
infinite unhandled interrupts since callout(9) was no longer invoked
during interrupt storm after vmlocking2 merge, I guess.

Should be pulled up to netbsd-5.
2011-04-10 15:23:06 +00:00
phx
73e37f5358 Set D-Link DSM-G600 power LED to solid green on start. 2011-04-09 19:56:20 +00:00
jdc
342707d5db Add EDID and video mode setting support to FFB.
Add definitions for registers related to video modes, and to DDC.  Rename
other registers to be more descriptive.
Add i2c bus routines to read the EDID data via DDC.
Add routines to calculate, and to set, the video mode.

Note, that interlaced and stereo video modes are not supported.

Thanks to Michael Lorenz and Jared McNeill for advice and encouragement,
and to Martin Husemann for testing.
2011-04-09 19:31:14 +00:00
joerg
406d512bfa Do not ignore errors from genprom. 2011-04-09 00:26:52 +00:00
dyoung
225e55bc85 There's no isa/ under cats/; update Makefile to reflect that. 2011-04-08 14:58:46 +00:00
nisimura
1a92bd3dae Minor format knots; sort a model list in alphabetical order and adjust
spacing.
2011-04-08 14:09:24 +00:00
phx
36ed4e1e88 QNAP support.
Note about the D-Link firmware.
2011-04-08 08:29:07 +00:00
isaki
6291bfee46 Poll the next medium on both drive of #0 and #1. 2011-04-07 13:38:21 +00:00
matt
bbaf07c722 Add a cp15 trapper to emulate the mrc/mcr instructions for the thread id
registers.
2011-04-07 11:02:24 +00:00
matt
f77463e13f Add a define for pcb_user_pid_rw 2011-04-07 11:01:49 +00:00
matt
3c5c08e46b Add __lwp_getprivate_fast 2011-04-07 10:20:29 +00:00
matt
a9de2ef0c9 Don't use the pcb anymore since the user read-only thread and process id
value is now grabbed from l_private.
2011-04-07 10:07:11 +00:00
matt
b6591ab3ce Fetch user read-only thread and process id from l->l_private, not the pcb.
(need to g/c the pcb field formerly used for this).
2011-04-07 10:03:47 +00:00
dyoung
9eb9a91423 Increase SYMTAB_SPACE so that this kernel will build. 2011-04-07 04:02:29 +00:00
dyoung
3f56488c0d Fix more const pci_attach_args fallout. 2011-04-07 04:01:40 +00:00
matt
558221d2a2 Fix bogus idepth on OEA. 2011-04-07 02:05:02 +00:00
matt
1a61b7e897 Get rid of cpu_lwp_setprivate since it's not needed on powerpc. 2011-04-07 02:04:06 +00:00
macallan
713b73c8c5 add mode setting support
If we find a monitor via DDC we switch to its preferred mode if it reports one,
otherwise stick with whatever the firmware set up.
2011-04-07 01:20:31 +00:00
macallan
0c7466a2ae defflag CRMFB_DEBUG 2011-04-07 01:07:31 +00:00
jym
d833e65927 Alright, set xvif(4) syntax once and for all. Tested with ipf(4) under
XEN3_DOM0 amd64.

Fixes PR misc/39376.

See http://mail-index.netbsd.org/port-xen/2011/04/06/msg006603.html
2011-04-06 23:51:55 +00:00
phx
e08320b5eb Enable all known RTC drivers. The correct RTC will automatically be chosen as
an I2C device, depending on the NAS model.
2011-04-06 18:12:15 +00:00
tsutsui
c2d1bbc260 Move intr_init() (which initializes evcnt(9) for interrupts)
from early machdep.c:mach_init() to autoconf.c:cpu_configure().

evcnt_init() isn't called yet when mach_init() is invoked from locore.S
and interrupts won't be enabled before cpu_configure(9).

Problem reported by Erik Bertelsen on port-pmax:
http://mail-index.NetBSD.org/port-pmax/2011/04/06/msg000093.html
2011-04-06 15:31:08 +00:00
tsutsui
3a5aec4b4e Sync with mipsX_subr.S:
>> Rename kernel_tlb_miss to kern_tlb_miss (everything else kern_xxx)
2011-04-06 14:12:36 +00:00
tsutsui
a46a76ec3e Sync with locore_mips1.S:
>> Load pc into ta0 instead of ra and then saving to ta0.
2011-04-06 14:04:32 +00:00
tsutsui
fb48dc859c Fix build error in previous:
>> ../arch/mips/mips/locore.S:632: Error: register value used as expression
2011-04-06 13:30:33 +00:00
matt
8c807efebc minor cleanups. foo -> foo_p. add some whitespace. 2011-04-06 05:53:27 +00:00
matt
50afc312ee A little constification.
Add MIPS 1004K entry.
2011-04-06 05:50:39 +00:00
matt
90086ecf83 Use the new COP0* stuff in cpuregs.h 2011-04-06 05:48:35 +00:00
matt
011b9dfc63 slight reordering. no functional change. 2011-04-06 05:47:54 +00:00
matt
e59e9990e5 Add a tiny bit of whitespace. 2011-04-06 05:43:11 +00:00
matt
ff7f1cb0e1 Fix some comments. 2011-04-06 05:42:45 +00:00
matt
7c88f4863a Fix LKM/MODULAR case. 2011-04-06 05:42:21 +00:00
matt
72dfff31fe Load pc into ta0 instead of ra and then saving to ta0.
misc comments fixes.
2011-04-06 05:39:51 +00:00
matt
1790477f41 Sort LWP fields 2011-04-06 05:38:19 +00:00
matt
0c8ae5bb18 Don't bother saving T8 (MIPS_CURLWP).
Avoid branches when determining delay slot.
2011-04-06 05:37:59 +00:00
matt
0d18afd259 Fix a bug with pmap_remove_all and pmap_deactivate. Should prevent any
pmap_activate from allocating an ASID while doing pmap_remove_all XXX.
2011-04-06 05:35:37 +00:00
matt
4bb672436e Remove dead code.
KNF cleanup.
2011-04-06 05:33:07 +00:00
matt
86cc1c53e6 Change a KASSERT to KASSERTMSG 2011-04-06 05:23:59 +00:00
matt
bd363a3179 Rename kernel_tlb_miss to kern_tlb_miss (everything else kern_xxx)
Don't load k1 in delay slot to MIPS_CURLWP before branching to
kern_gen_exception since that doesn't use the lwp pointer in k1
(since it can the lwp in MIPS_CURLWP instead).  Use nop instead.
Rework tlb_invalid_exception a bit so the result of the tlbp is
done before seeing if the tlb slot was even or odd.  Makes the
routine slightly smaller.
2011-04-06 05:13:36 +00:00
matt
dc2f9d8cf0 Indent delay slots by a space. 2011-04-06 05:07:40 +00:00
dyoung
9aa93a16e8 Fix target 'tags'. 2011-04-06 01:49:23 +00:00
dyoung
4867aaab9f Fix fallout from pci_attach_args constification. 2011-04-06 01:48:43 +00:00
dyoung
b1084717a7 Fix pci_attach_args constification fallout. 2011-04-06 01:44:45 +00:00
dyoung
8080811d3e Fix target 'tags'. 2011-04-06 01:43:13 +00:00
dyoung
67ce16669f Fix fallout of pci_attach_args constification. This should be the last
one for algor.
2011-04-06 01:37:59 +00:00
dyoung
3a4f5f68fa Fix fallout from pci_attach_args constification. 2011-04-06 01:32:06 +00:00
dyoung
4934592d44 Fix target 'tags'. 2011-04-06 01:31:20 +00:00
dyoung
10db401f9d Fix fallout from pci_attach_args constification. 2011-04-06 01:25:18 +00:00
dyoung
92b62812ca Fix target 'tags'. 2011-04-06 01:24:43 +00:00
pgoyette
6f2c337e45 If an ioapic doesn't really exist, don't add it to internal tables.
This is what other xxxBSDs seem to do in similar circumstances.

Addresses my PR kern/43568

OK jruoho@ in private Email
2011-04-05 13:43:33 +00:00
pgoyette
4dbe4d01fa Display a warning message if an attempt is made to process interrupt
routing for a bus that has previously been processed.

From PR kern/43570 - doesn't fix the problem but at least lets you
know it exists.
2011-04-05 13:17:04 +00:00
macallan
4ac5047fdd remove some old debug code 2011-04-04 22:50:36 +00:00
macallan
95c4a4389f crmfb needs edid and friends now 2011-04-04 22:15:13 +00:00
dyoung
ef8087871b Don't need x86_stub.c here, we'll pick it up from files.x86. 2011-04-04 21:35:31 +00:00
dyoung
fd8e7c1dbb As pointed out by Manuel Bouyer and Taylor R Campbell, I forgot to
commit the change to files.x86 that adds x86_stub.c, so do that.
2011-04-04 21:33:49 +00:00
dyoung
d3e53912d2 Neither pci_dma64_available(), pci_probe_device(), pci_mapreg_map(9),
pci_find_rom(), pci_intr_map(9), pci_enumerate_bus(), nor the match
predicate passed to pciide_compat_intr_establish() should ever modify
their pci_attach_args argument, so make their pci_attach_args arguments
const and deal with the fallout throughout the kernel.

For the most part, these changes add a 'const' where there was no
'const' before, however, some drivers and MD code used to modify
pci_attach_args.  Now those drivers either copy their pci_attach_args
and modify the copy, or refrain from modifying pci_attach_args:

Xen: according to Manuel Bouyer, writing to pci_attach_args in
    pci_intr_map() was a leftover from Xen 2.  Probably a bug.  I
    stopped writing it.  I have not tested this change.

siside(4): sis_hostbr_match() needlessly wrote to pci_attach_args.
    Probably a bug.  I use a temporary variable.  I have not tested this
    change.

slide(4): sl82c105_chip_map() overwrote the caller's pci_attach_args.
    Probably a bug.  Use a local pci_attach_args.  I have not tested
    this change.

viaide(4): via_sata_chip_map() and via_sata_chip_map_new() overwrote the
    caller's pci_attach_args.  Probably a bug.  Make a local copy of the
    caller's pci_attach_args and modify the copy.  I have not tested
    this change.

While I'm here, make pci_mapreg_submap() static.

With these changes in place, I have tested the compilation of these
kernels:

alpha GENERIC
amd64 GENERIC XEN3_DOM0
arc GENERIC
atari HADES MILAN-PCIIDE
bebox GENERIC
cats GENERIC
cobalt GENERIC
evbarm-eb NSLU2
evbarm-el ADI_BRH ARMADILLO9 CP3100 GEMINI GEMINI_MASTER GEMINI_SLAVE GUMSTIX
	HDL_G IMX31LITE INTEGRATOR IQ31244 IQ80310 IQ80321 IXDP425 IXM1200
	KUROBOX_PRO LUBBOCK MARVELL_NAS NAPPI SHEEVAPLUG SMDK2800 TEAMASA_NPWR
	TEAMASA_NPWR_FC TS7200 TWINTAIL ZAO425
evbmips-el AP30 DBAU1500 DBAU1550 MALTA MERAKI MTX-1 OMSAL400 RB153 WGT624V3
evbmips64-el XLSATX
evbppc EV64260 MPC8536DS MPC8548CDS OPENBLOCKS200 OPENBLOCKS266
	OPENBLOCKS266_OPT P2020RDB PMPPC RB800 WALNUT
hp700 GENERIC
i386 ALL XEN3_DOM0 XEN3_DOMU
ibmnws GENERIC
macppc GENERIC
mvmeppc GENERIC
netwinder GENERIC
ofppc GENERIC
prep GENERIC
sandpoint GENERIC
sgimips GENERIC32_IP2x
sparc GENERIC_SUN4U KRUPS
sparc64 GENERIC

As of Sun Apr 3 15:26:26 CDT 2011, I could not compile these kernels
with or without my patches in place:

### evbmips-el GDIUM

nbmake: nbmake: don't know how to make /home/dyoung/pristine-nbsd/src/sys/arch/mips/mips/softintr.c. Stop

### evbarm-el MPCSA_GENERIC
src/sys/arch/evbarm/conf/MPCSA_GENERIC:318: ds1672rtc*: unknown device `ds1672rtc'

### ia64 GENERIC

/tmp/genassym.28085/assym.c: In function 'f111':
/tmp/genassym.28085/assym.c:67: error: invalid application of 'sizeof' to incomplete type 'struct pcb'
/tmp/genassym.28085/assym.c:76: error: dereferencing pointer to incomplete type

### sgimips GENERIC32_IP3x

crmfb.o: In function `crmfb_attach':
crmfb.c:(.text+0x2304): undefined reference to `ddc_read_edid'
crmfb.c:(.text+0x2304): relocation truncated to fit: R_MIPS_26 against `ddc_read_edid'
crmfb.c:(.text+0x234c): undefined reference to `edid_parse'
crmfb.c:(.text+0x234c): relocation truncated to fit: R_MIPS_26 against `edid_parse'
crmfb.c:(.text+0x2354): undefined reference to `edid_print'
crmfb.c:(.text+0x2354): relocation truncated to fit: R_MIPS_26 against `edid_print'
2011-04-04 20:37:49 +00:00
dyoung
a184f1f486 Neither pci_dma64_available(), pci_probe_device(), pci_mapreg_map(9),
pci_find_rom(), pci_intr_map(9), pci_enumerate_bus(), nor the match
predicate passed to pciide_compat_intr_establish() should ever modify
their pci_attach_args argument, so make their pci_attach_args arguments
const and deal with the fallout throughout the kernel.

For the most part, these changes add a 'const' where there was no
'const' before, however, some drivers and MD code used to modify
pci_attach_args.  Now those drivers either copy their pci_attach_args
and modify the copy, or refrain from modifying pci_attach_args:

Xen: according to Manuel Bouyer, writing to pci_attach_args in
    pci_intr_map() was a leftover from Xen 2.  Probably a bug.  I
    stopped writing it.  I have not tested this change.

siside(4): sis_hostbr_match() needlessly wrote to pci_attach_args.
    Probably a bug.  I use a temporary variable.  I have not tested this
    change.

slide(4): sl82c105_chip_map() overwrote the caller's pci_attach_args.
    Probably a bug.  Use a local pci_attach_args.  I have not tested
    this change.

viaide(4): via_sata_chip_map() and via_sata_chip_map_new() overwrote the
    caller's pci_attach_args.  Probably a bug.  Make a local copy of the
    caller's pci_attach_args and modify the copy.  I have not tested
    this change.

While I'm here, make pci_mapreg_submap() static.

With these changes in place, I have tested the compilation of these
kernels:

alpha GENERIC
amd64 GENERIC XEN3_DOM0
arc GENERIC
atari HADES MILAN-PCIIDE
bebox GENERIC
cats GENERIC
cobalt GENERIC
evbarm-eb NSLU2
evbarm-el ADI_BRH ARMADILLO9 CP3100 GEMINI GEMINI_MASTER GEMINI_SLAVE GUMSTIX
	HDL_G IMX31LITE INTEGRATOR IQ31244 IQ80310 IQ80321 IXDP425 IXM1200
	KUROBOX_PRO LUBBOCK MARVELL_NAS NAPPI SHEEVAPLUG SMDK2800 TEAMASA_NPWR
	TEAMASA_NPWR_FC TS7200 TWINTAIL ZAO425
evbmips-el AP30 DBAU1500 DBAU1550 MALTA MERAKI MTX-1 OMSAL400 RB153 WGT624V3
evbmips64-el XLSATX
evbppc EV64260 MPC8536DS MPC8548CDS OPENBLOCKS200 OPENBLOCKS266
	OPENBLOCKS266_OPT P2020RDB PMPPC RB800 WALNUT
hp700 GENERIC
i386 ALL XEN3_DOM0 XEN3_DOMU
ibmnws GENERIC
macppc GENERIC
mvmeppc GENERIC
netwinder GENERIC
ofppc GENERIC
prep GENERIC
sandpoint GENERIC
sgimips GENERIC32_IP2x
sparc GENERIC_SUN4U KRUPS
sparc64 GENERIC

As of Sun Apr 3 15:26:26 CDT 2011, I could not compile these kernels
with or without my patches in place:

### evbmips-el GDIUM

nbmake: nbmake: don't know how to make /home/dyoung/pristine-nbsd/src/sys/arch/mips/mips/softintr.c. Stop

### evbarm-el MPCSA_GENERIC
src/sys/arch/evbarm/conf/MPCSA_GENERIC:318: ds1672rtc*: unknown device `ds1672rtc'

### ia64 GENERIC

/tmp/genassym.28085/assym.c: In function 'f111':
/tmp/genassym.28085/assym.c:67: error: invalid application of 'sizeof' to incomplete type 'struct pcb'
/tmp/genassym.28085/assym.c:76: error: dereferencing pointer to incomplete type

### sgimips GENERIC32_IP3x

crmfb.o: In function `crmfb_attach':
crmfb.c:(.text+0x2304): undefined reference to `ddc_read_edid'
crmfb.c:(.text+0x2304): relocation truncated to fit: R_MIPS_26 against `ddc_read_edid'
crmfb.c:(.text+0x234c): undefined reference to `edid_parse'
crmfb.c:(.text+0x234c): relocation truncated to fit: R_MIPS_26 against `edid_parse'
crmfb.c:(.text+0x2354): undefined reference to `edid_print'
crmfb.c:(.text+0x2354): relocation truncated to fit: R_MIPS_26 against `edid_print'
2011-04-04 20:37:44 +00:00
dyoung
73ac15efaf Make usb_dma a dependency of ahci(4), since it needs usb_allocmem(9). 2011-04-04 20:01:14 +00:00
dyoung
c2decf31b1 Use callout(9) instead of the USB compatibility junk that went away
months ago.
2011-04-04 19:58:56 +00:00
dyoung
a12a2adf18 The PCI pass-through driver is not too useful without PCI drivers, but
add it to this kernel configuration so that at it gets built some of the
time.
2011-04-04 19:57:31 +00:00
dyoung
89b7c74ba3 Pull in the Atheros HAL options so that OPENBLOCKS266_OPT will build. 2011-04-04 19:55:16 +00:00
dyoung
062b6658ec Fix target 'tags'. 2011-04-04 19:44:16 +00:00
dyoung
911a33d453 Add a couple of make(1) include files that provide lists of source
files needed for tags computation in evbppc, evbarm, cats, and other
architectures.
2011-04-04 19:43:34 +00:00
dyoung
8d4a897025 Fix target 'tags'. 2011-04-04 19:41:24 +00:00