History log of /haiku/src/system/kernel/arch/x86/timers/x86_hpet.cpp
Revision Date Author Comments
# f1b2d3ba 24-Feb-2022 Alexander von Gluck IV <kallisti5@unixzen.com>

kernel/x86: Fix and modernize tracing of timer code; no functional change

* Fixes functionality of TRACE statements on 64-bit platforms.

Change-Id: Iaba8f8b2d49ec1acda3fc2d51e24a207c5bcc97a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4992
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>


# ddb70de4 11-Jan-2022 David Karoly <karolyd577@gmail.com>

kernel/x86/hpet: fix build with TRACE enabled

Change-Id: I8b1d8f0e8ba7e800fe458135197080617be731bd
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4860
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>


# 69a8b954 23-Jun-2012 Ingo Weinhold <ingo_weinhold@gmx.de>

FixedWidthPointer: Fix ==/!= operators, remove OtherType casts

* FixedWidthPointer:
- operators ==/!=: Change second operand type from void* to const
Type*. Also add non-const version to resolve ambiguity warning when
comparing with non-const pointer.
- Add Pointer() getter.
- Remove templatized cast operators. They are nice for casting the
pointer directly to another pointer type, but result in ambiguity.
* Make preloaded_image::debug_string_table non-const. Avoids clashes of
the const and non-coast FixedWidthPointer comparison operators. A
cleaner (but more verbose) solution would be to spezialize
FixedWidthPointer for const types.


# 62d36f98 22-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Removed the addr_t conversion operators from FixedWidthPointer which makes comparison against NULL work properly.


# d8efc6ca 21-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Changes to kernel_args to make it identical for x86 and x86_64.

* Added a FixedWidthPointer template class which uses 64-bit storage to hold
a pointer. This is used in place of raw pointers in kernel_args.
* Added __attribute__((packed)) to kernel_args and all structures contained
within it. This is necessary due to different alignment behaviour for
32-bit and 64-bit compilation with GCC.
* With these changes, kernel_args will now come out the same size for both
the x86_64 kernel and the loader, excluding the preloaded_image structure
which has not yet been changed.
* Tested both an x86 GCC2 and GCC4 build, no problems caused by these changes.


# 147133b7 25-May-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* First run through the kernel's private parts to use phys_{addr,size}_t
where appropriate.
* Typedef'ed page_num_t to phys_addr_t and used it in more places in
vm_page.{h,cpp}.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36937 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ae6721ad 28-Feb-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Small cleanups, undef TRACE_HPET. Still at priority 0.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35661 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 36eb7051 24-Feb-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fixed various problems which didn't let HPET timers work on my machine, most
notably:
- in hpet_clear_hardware_timer() we cleared the HPET_CONF_TIMER_INT_ENABLE
flag, and never set it back anymore (now we do, in hpet_set_hardware_timer())
- the incorrect interrupt configuration (although it shouldn't matter in legacy mode).
Also test the HPET counter before trying to use it.
Improved debug information.
HPET timers are still at priority 0, since I coulnd't yet test on other
machines (besides mine, QEMU and XenServer 5.5), and doen't work for
some reason with SMP enabled.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35611 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0b102d72 11-Feb-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

The hpet registers area is already wired, so use the vm_map_physical_memory()
call with the true parameter. Fixes a panic at boot when using the hpet timers


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35453 a95241bf-73f2-0310-859d-f6bbb57e9c96


# fee1bc8e 30-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Back to timer 2, since timer 0 doesn't work at all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33368 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ea40a61a 29-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Some big changes, still not working on my laptop, since hpet interrupts
aren't routed correctly over the 8259, it seems.
- Removed passing the hpet_regs around, since there's a static variable.
- Added lots of debug dprintfs.
- Fixed setting the timer interrupt to edge
- Timer is initialized once.
- Use the timer 0 instead of 2.
- Renamed register definitions to be more readable
- Use 64 bits registers and unions where applicable.
- Other things I don't remember


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33345 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8593bcad 28-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Use the hpet defines in the source.
Also shortened some defines using "TN" instead of "TIMER". It's also
the same scheme used in the specs


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33334 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6dc4fd11 25-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Uncommented the hpet timer from the timers list.
Lowered its priority of hpet timer so it doesn't get picked up first
(yet)
Changed the debug output to be conditional.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33292 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6d92e805 25-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

- Moved timer conversion to a method, and added LL to the conversion
factor to avoid compiler issues.
- Removed some useless and commented debug stuff.
- Now prints also the global HPET configuration.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33291 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4687d95b 25-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Renamed x86_hpet.c to x86_hpet.cpp and fixed the compile errors.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33290 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 69a8b95491c160f03a5b0dab0fa8d1899fe42d4b 23-Jun-2012 Ingo Weinhold <ingo_weinhold@gmx.de>

FixedWidthPointer: Fix ==/!= operators, remove OtherType casts

* FixedWidthPointer:
- operators ==/!=: Change second operand type from void* to const
Type*. Also add non-const version to resolve ambiguity warning when
comparing with non-const pointer.
- Add Pointer() getter.
- Remove templatized cast operators. They are nice for casting the
pointer directly to another pointer type, but result in ambiguity.
* Make preloaded_image::debug_string_table non-const. Avoids clashes of
the const and non-coast FixedWidthPointer comparison operators. A
cleaner (but more verbose) solution would be to spezialize
FixedWidthPointer for const types.


# 62d36f98331067e472188f6c020c2ccd808f48cf 22-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Removed the addr_t conversion operators from FixedWidthPointer which makes comparison against NULL work properly.


# d8efc6caf6babe278c48e8aa3277376fb68ff455 21-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Changes to kernel_args to make it identical for x86 and x86_64.

* Added a FixedWidthPointer template class which uses 64-bit storage to hold
a pointer. This is used in place of raw pointers in kernel_args.
* Added __attribute__((packed)) to kernel_args and all structures contained
within it. This is necessary due to different alignment behaviour for
32-bit and 64-bit compilation with GCC.
* With these changes, kernel_args will now come out the same size for both
the x86_64 kernel and the loader, excluding the preloaded_image structure
which has not yet been changed.
* Tested both an x86 GCC2 and GCC4 build, no problems caused by these changes.


# 147133b76cbb1603bdbff295505f5b830cb4e688 25-May-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* First run through the kernel's private parts to use phys_{addr,size}_t
where appropriate.
* Typedef'ed page_num_t to phys_addr_t and used it in more places in
vm_page.{h,cpp}.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36937 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ae6721ad6e2d7b96d070940aca9d85b37420f46d 28-Feb-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Small cleanups, undef TRACE_HPET. Still at priority 0.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35661 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 36eb70516c7b740ccb7e5879a12be011b30b2506 24-Feb-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fixed various problems which didn't let HPET timers work on my machine, most
notably:
- in hpet_clear_hardware_timer() we cleared the HPET_CONF_TIMER_INT_ENABLE
flag, and never set it back anymore (now we do, in hpet_set_hardware_timer())
- the incorrect interrupt configuration (although it shouldn't matter in legacy mode).
Also test the HPET counter before trying to use it.
Improved debug information.
HPET timers are still at priority 0, since I coulnd't yet test on other
machines (besides mine, QEMU and XenServer 5.5), and doen't work for
some reason with SMP enabled.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35611 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0b102d72d5933cb730ca0a0dab29bad224180a14 11-Feb-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

The hpet registers area is already wired, so use the vm_map_physical_memory()
call with the true parameter. Fixes a panic at boot when using the hpet timers


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35453 a95241bf-73f2-0310-859d-f6bbb57e9c96


# fee1bc8eed428ed518a5d728046beafc1bda1021 30-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Back to timer 2, since timer 0 doesn't work at all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33368 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ea40a61a843fb9d80acb1c8fba1979cfe24c1200 29-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Some big changes, still not working on my laptop, since hpet interrupts
aren't routed correctly over the 8259, it seems.
- Removed passing the hpet_regs around, since there's a static variable.
- Added lots of debug dprintfs.
- Fixed setting the timer interrupt to edge
- Timer is initialized once.
- Use the timer 0 instead of 2.
- Renamed register definitions to be more readable
- Use 64 bits registers and unions where applicable.
- Other things I don't remember


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33345 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8593bcad87981276728575b026417e2096d6c9eb 28-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Use the hpet defines in the source.
Also shortened some defines using "TN" instead of "TIMER". It's also
the same scheme used in the specs


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33334 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6dc4fd11a2c4eab281d78038cf794027608d23b6 25-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Uncommented the hpet timer from the timers list.
Lowered its priority of hpet timer so it doesn't get picked up first
(yet)
Changed the debug output to be conditional.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33292 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6d92e80531ecafc3965c25e55adbd82f995389f1 25-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

- Moved timer conversion to a method, and added LL to the conversion
factor to avoid compiler issues.
- Removed some useless and commented debug stuff.
- Now prints also the global HPET configuration.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33291 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4687d95b681d988c5a2a9da7c53f400daa76dc18 25-Sep-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Renamed x86_hpet.c to x86_hpet.cpp and fixed the compile errors.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33290 a95241bf-73f2-0310-859d-f6bbb57e9c96