Commit Graph

39466 Commits

Author SHA1 Message Date
Michael Lotz 6347525607 * Always retrieve the APIC ID from the descriptors.
* Actually program the IO-APIC ID when configuring the IO-APIC.
* Moved some debug output around.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41447 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 19:55:56 +00:00
Ingo Weinhold 5e36c12a42 mmu_allocate_physical(): The wrong base argument was passed to
get_free_physical_address_range(). Fixes the debug syslog feature.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41446 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 19:10:26 +00:00
Michael Lotz a56cbb2afb * When initializing MSI support, don't assume a single 24 entry IO-APIC. Instead
mark the ISA interrupts as unusable and then use ioapic_is_interrupt_available
  to determine if that vector is possibly taken by an IO-APIC. If IO-APICs are
  not used, this will simply always return false, leaving all vectors free for
  MSI use.
* The msi_init() now has to be done after a potential IO-APIC init, so it is now
  done after ioapic_init() instead of inside apic_init().
* Add apic_disable_local_ints() to clear the local ints on the local APIC once
  we are in APIC mode (i.e. the IO-APIC is set up and we don't need the external
  routing anymore).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41445 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 18:05:05 +00:00
Alexander von Gluck IV dfd1e5889e remove (now) un-needed modeline examples; no functional change
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41443 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 17:04:31 +00:00
Michael Lotz 0f91697fd7 Fix previous commit and add printing APIC id fields.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41437 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 11:24:15 +00:00
Michael Lotz cdb247a328 Extended and fix some of the debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41436 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 11:16:10 +00:00
Michael Lotz 7a8ce431b5 Obviously we want to use the GSI as interrupt vector as well...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41435 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 09:49:51 +00:00
Michael Lotz e9d5569740 Only make GSI 0 into an ExtInt and GSIs 1-15 ISA interrupts. When having
multiple IO-APICs every IO-APIC was initialized to the standard mapping before.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41434 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 09:13:21 +00:00
Michael Lotz 407af313ca Make the signature argument to get_table() const. Should fix the GCC4 build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41433 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 09:05:43 +00:00
Michael Lotz ca67ddb353 When enumerating IO-APICs failed, try to still get the routing done with how far
we got. If the routing is possible with the limited IO-APICs everythings good,
if not we will simply fail at the routing preparation stage where we can still
fall back gracefully. This makes things a bit more error resilient.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41432 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 09:01:50 +00:00
Michael Lotz eda743903e Provide an interrupt availability check callback instead of a maximum IRQ
number. This accounts for possible gaps in the IO-APIC GSI mappings. Since most
of the time there will be only a single IO-APIC the extra overhead is relatively
small.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41431 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 08:47:56 +00:00
Michael Lotz d11e32a807 Enumerate IO-APICs using the ACPI Multiple APIC Descriptor Table (MADT). We do
the same for the first IO-APIC in the bootloader (also using the MADT), but
here we can use the ACPI module. The enumerated IO-APICs are added to the list
and should be usable from there on. For lack of hardware I wasn't able to really
test that though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41430 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 08:27:03 +00:00
Michael Lotz 2645ca0a28 Provide a function to gain ACPI table access.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41429 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 08:22:22 +00:00
Michael Lotz 5d01e61a91 * Prepared everything to eventually support multiple IO-APICs.
* Added some TODOs regarding register write order that might have bad side
  effects.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41428 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 02:50:36 +00:00
Michael Lotz 20537052a2 Quick build fix for the FreeBSD compatibility layer. Maybe the definition should
be moved to a (even) more private header?


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41427 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 01:30:55 +00:00
Michael Lotz dc14d97b7f * Move the legacy PIC and the IO-APIC code into their own source file. No
functional change intended.
* Use an appropriately sized sLevelTriggeredInterrupts for each controller type.
  This also fixes an out of bound access for IO-APICs with more than 32 entries
  and also returns the right mode in such cases.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41426 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-11 00:53:03 +00:00
Jérôme Duval 26d28d0d1d enable KASSERT in net80211 and fixes wrong uses of the macro.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41425 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 21:59:55 +00:00
Jérôme Duval 7df33d912b * Implement inbound isochronous transfer for EHCI, based on UHCI implementation.
* changes next_log to their actual type instead of void*
* the field this_phy now includes the item type, it simplifies things.
* isochronous transfer descriptors are linked in the periodic frame list first,
and points to existing interrupt transfer descriptors.

This is still work in progress. Yet it's worth committing as it doesn't seem to
have impacts, and is required for the UVC SoC project. Tested basically with 
usb_webcam to receive UVC stream headers.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41424 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 21:25:32 +00:00
Jérôme Duval 16d113f9e5 fix typo
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41423 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 21:05:41 +00:00
Michael Lotz 393b3b70a7 Fix build with TRACEs on.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41422 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 18:47:11 +00:00
Oliver Tappe af2da315dc Fix the larger problem that was hiding behind the build problem of set_haiku_revsion on FreeBSD:
* the length of the sHaikuRevision character array symbol needs to be set explicitly,
  as using either _SYS_NAMELEN or sizeof(utsname::version) will only return the values
  for the host, which may not match ours, thus potentially causing problems when using
  sHaikuRevision
* add headers/private/system_revision.h which defines SYSTEM_REVISION_LENGTH to 128
* adjust definitions of sHaikuRevision in libroot and kernel accordingly
utsname::version is shorter than SYSTEM_REVISION_LENGTH, but that doesn't cause any harm
until we have indeed switched to a DVCS (in which case longer revision strings will be 
cut off by 'uname').


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41421 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 15:35:04 +00:00
Michael Lotz c7e314bba7 Use const references instead of pointers for the print functions.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41417 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 10:07:46 +00:00
Michael Lotz 9173e3843e * Choose the desired configuration of the link devices at preparation time
already. This allows to detect invalid settings before starting to enable
  IRQ routing and therefore allows to gracefully fall back to PIC mode on error.
* Actually read the number of IO-APIC entries before using that number in
  routing preparation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41416 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 09:59:50 +00:00
Michael Lotz ad1757252e Check hardwired and chosen IRQs against the maximum we can address. Try to fail
gracefully in such cases (resulting in the IO-APIC not being used).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41415 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 09:29:57 +00:00
Michael Lotz 414f205aee Remove the IRQ to IO-APIC pin mapping array. It isn't used as we don't redirect
vectors at all. It'd also not work for multi IO-APIC setups which we don't
support yet (but are relatively rare anyway).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41414 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 08:50:57 +00:00
Michael Lotz 3c4a8701d6 Remove comment that does no longer apply.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41413 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 07:31:55 +00:00
Alexander von Gluck IV c9769c1cc4 small workaround to prevent network preflet crashes on NAT network cards in VirtualBox and VMWare. Not a final solution but preventing a crash is always a plus. resolves #7038. Thanks Skipp_OSX!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41412 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 03:03:29 +00:00
Alexander von Gluck IV 2613175e19 * add commented out radeon_hd driver/accel to HaikuImage
* add boot item support to radeon hd driver
* add edid storage to shared info
* add pull of active monitor VESA EDID to radeon hd driver (until AtomBios complete)
* EDID pulled in driver now passed to create_display_modes
* move registers to external stock xorg radeon hd register headers (lic. allows it)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41411 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-10 02:02:41 +00:00
Joachim Seemer dde6902f79 Updated Finnish catkeys.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41406 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 18:11:12 +00:00
Michael Lotz c5c4213aee Actually increase the usage counter by the amount of devices behind the link
device as it may have multiple devices routed to it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41402 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 16:49:17 +00:00
Michael Lotz 80c4e0ced0 * Balance the IRQs amongst the possible ones. A simple usage counter, filled by
hardwired GSIs and updated on configuring the link devices, is used for that.
  This doesn't guarantee optimal results as some link devices may not be
  configurable to some IRQs and we might fill up their slots this way. Most of
  the time this should be good enough though.
* Take the BIOS assigned IRQ white list into account when assigning IRQs in the
  ISA range and avoid assigning to non white listed IRQs. Quite probably it'd be
  ok to use all of the IRQs present in the possible IRQ list, but let's play it
  safe...
* Also white listed are the IRQs that were set on the link device before
  reconfiguration.
* Some cleanup, use references instead of pointers where applicable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41401 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 16:46:18 +00:00
Michael Lotz 35ce82238f * Seperated out reading and enabling IRQ routing. Reading will only read the
configuration that doesn't require any link device changes and will only
  prepare for updating the pci_info. Enabling then does the link device setup
  and updates the pci_info with the new IRQ values.
* Configuring link devices now takes into account that multiple devices may
  share a single link device, meaning that the sharing PCI devices can't be
  configured independently.

We still only blindly configure the first possible IRQ on the link devices, but
now we actually have all the information to change that. Working on that next.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41400 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 15:38:18 +00:00
Michael Lotz cbfddcd6e8 * Separate out matching PCI devices and updating their info. They will be called
independently. Matching will happen first to enumerate and match all devices.
  Updating will happen after configuring all link devices, so once we know the
  final GSI of all entries. The info about matching functions is kept in a
  bitmask in the table entry.
* Move routing table entry handling out of the loop into it's own function to
  faciliate early returns.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41399 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 13:26:41 +00:00
Michael Lotz 2800b06462 Add missing const to the path argument of get_handle().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41398 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 13:05:28 +00:00
Michael Lotz f65eaf15ad Read and keep around the originally assigned interrupt_line of the PCI devices.
Those can be used to white list PCI IRQs in ISA space (<= 15) as those are
basically guaranteed not to overlap with ISA devices. Those white listed entries
can then be used if we only have a 16 pin IO-APIC or if there are only legacy
IRQ resources available for configuration (i.e. ones with bitmasks of 16 bits,
limiting their range to IRQs 0-15).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41397 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 12:19:41 +00:00
Michael Lotz de7dbd8a33 Tiny cleanup, that one went past the 80 chars.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41396 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 11:59:31 +00:00
Michael Lotz a07f84d9cb Do the PCI device matching using direct PCI config space matches instead of
using the already parsed pci_info data from the PCI module. This removes the
need to iterate over all of the pci_infos for each routing table entries which
makes this an order of magnitude less expensive. Heavily inspired by the
corresponding FreeBSD code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41395 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 11:53:52 +00:00
Philippe Houdoin 48315186a8 Remove reference to SVN, now that revision is a VCS-agnostic string...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41394 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 11:49:03 +00:00
Michael Lotz c2507ed4ae Actually use the ACPICA headers to get at the correct types instead of
duplicating the structs on our side. IRQ assignment didn't work with extended
IRQ resources because the alignment of the structs were different in our local
duplicates...
Brings in the ACPICA naming sheme and isn't really clean either. So all of the
reconfiguration should probably just be moved into the ACPI bus_manager.
On the plus side we can now use the proper descriptive macros instead of the
hardcoded numbers which fixes a few of the TODOs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41393 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-09 01:56:20 +00:00
Oliver Tappe cb666277a7 Revert part of r41389 that injured binary compatibility (rightly pointed out by Axel)
* length of utsname members must stay at length of 32
This will work just the same for now. When using a DVCS yields longer revisions, we need to adjust AboutSystem to fetch the full revision directly from the ELF section '_haiku_revision' (as found in libroot.so or libbe.so).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41392 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 21:51:58 +00:00
Scott McCreary df84df070d Updated expat to fix its directories.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41391 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 20:42:57 +00:00
Jérôme Duval 676e23a6fa NO_HAIKU_FIRMWARE_NAME_MAP defined an element {NULL} whereas the array length is zero
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41390 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 20:14:05 +00:00
Oliver Tappe 6250297a08 Switch haiku-revision from uint32 to string, as that's going to be required soon, no matter if we switch to Git or Mercurial
* increase _SYS_NAMELEN defined in sys/utsname.h to 128 to allow long(ish) revisions
* sHaikuRevision is now a static character array (in both libroot and kernel)
* adjust build tool set_haiku_revision to write the revision as string


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41389 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 20:02:42 +00:00
Jérôme Duval c356b0477f spaces -> tab
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41388 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 19:36:47 +00:00
Jérôme Duval eae25c8854 "intel_extreme" was printed twice
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41387 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 19:18:31 +00:00
Jérôme Duval c5fc0286bc style fix
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41386 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 19:16:42 +00:00
Scott McCreary 940d7808e5 Added setting of LC_CTYPE to SetupEnviroment, this fixes #7412
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41385 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 18:26:51 +00:00
Michael Lotz d3e3ae8edc Implement a very naive configure_link_device() function that just blindly sets
the first possible configuration. This will probably result in a "everything
mapped to a single IRQ" situation, but should get systems that make use of link
devices in APIC mode at least running.
To make more sensible decisions the interface has to be changed next as it
currently doesn't allow to get anything but the very first possible config.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41384 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 13:15:26 +00:00
Michael Lotz 2a127b718c Reimplement the IRQ setting function. Based on the template we get from current
resources we input the desired configuration and then set them. Note that the
set_current_resources() ("_SRS") method is pretty picky (on the low-level ACPI
side) and needs the configuration in exactly the form get_current_resources()
("_CRS") returns, so that's why we need to utilize that buffer as a template.
Looking at FreeBSD there seem to be systems that don't actually provide a
"_CRS", where we will need to fall back to using the get_possible_resources()
("_PRS") data to construct a valid template...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41383 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 12:56:49 +00:00
Michael Lotz ce57718d12 Add set_current_resources() which will be used to configure device resources
from settings retrieved through get_{current|possible}_resources().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41382 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-05-08 12:13:55 +00:00