Commit graph

60 commits

Author SHA1 Message Date
Dmitry Borisov
991dbeff53 [ISAPNP] Fix the truncation of 32-bit configuration I/O reads
CORE-18562
2024-08-03 17:08:43 +06:00
Dmitry Borisov
b36d9bd9c1 [ISAPNP_UNITTEST] Add unit tests exercising device discovery and device resources functionality
CORE-18562
2024-08-03 17:08:43 +06:00
Dmitry Borisov
016d01e5d1 [ISAPNP] Extract resource definitions
Prepare the driver for upcoming API tests
CORE-18562
2024-08-03 17:08:43 +06:00
Dmitry Borisov
4ba8a8b59b [ISAPNP] Allocate the Read Port resources on demand
This will simplify failure paths and reduce memory usage
2024-08-03 17:08:42 +06:00
Hervé Poussineau
3a32d5980c [ISAPNP] Generate hardware ids and compatible ids in upper case 2022-09-23 23:07:45 +02:00
Dmitry Borisov
84fabd819d [ISAPNP] Add support for NEC PC-98 series 2021-11-17 13:56:29 +03:00
Hervé Poussineau
ac13f37d0a [ISAPNP] Generate a name for PDO, as required 2021-10-14 23:39:30 +02:00
Dmitry Borisov
18b4cc1479 [ISAPNP] Start the driver early in the boot
Because our child devices can have boot-start drivers
2021-06-20 19:24:32 +06:00
Dmitry Borisov
adac7dc2e5 [ISAPNP] Implement device configuration 2021-06-20 19:24:32 +06:00
Dmitry Borisov
8939abf113 [ISAPNP] Disable bus scan on unsupported platforms
This speeds up boot a bit and also decreases binary size.

- Introduce a new CMake define ISAPNP_ENABLE that defined only in x86 platform
  when ISA PnP is supported.
2021-06-20 19:24:32 +06:00
Dmitry Borisov
e318d22940 [ISAPNP] Disable I/O range check before activation
See Table A-2 of "Plug and Play ISA Specification 1.0a"
2021-06-20 19:24:31 +06:00
Dmitry Borisov
367f4b1581 [ISAPNP] Map configuration states to PnP states
Rework the hardware support code to avoid unneeded transitions
between configuration states.
- Only call WaitForKey when needed.
- Each PnP state transition causes the bus to move to WaitForKey state.

Besides, deactivate logical device during processing remove request.
2021-06-20 19:24:31 +06:00
Dmitry Borisov
d6dca83baf [ISAPNP] Reduce software delay 2021-06-20 19:24:31 +06:00
Dmitry Borisov
8ed43b6907 [ISAPNP] Fix descriptors and support alternative configurations
- Fix empty resource descriptors being created.
- Properly support IRQ descriptors.
- Introduce four helpers made to help search descriptors
  in the logical device's requirements.
- Implement support for memory descriptors and alternative configurations.
- DMA descriptors are always DMA_8.
2021-06-20 19:24:31 +06:00
Dmitry Borisov
b29a3ac524 [ISAPNP] Read all resources when detecting devices 2021-06-20 19:24:31 +06:00
Dmitry Borisov
ca42de9c31 [ISAPNP] Rewrite the tag parser
- Support all resource descriptors.
- Optimize card identification.
- Detect cards that is no longer present on the bus.
- Deactivate cards after the identification phase; they will be activated
  by start device IRP.
- Provide a device description and compatible IDs to the device manager.
- Prevent duplicate IDs across multiple logical devices.
- Suppress warning about the usage of literals in port addresses.
2021-06-20 19:24:31 +06:00
Dmitry Borisov
7c897dfbd1 [ISAPNP] Use the correct types for helper functions 2021-06-20 19:24:31 +06:00
Dmitry Borisov
c4b6330b14 [ISAPNP] Implement the Read Port resource management
Currently disabled until the kernel is ready
2021-06-20 19:24:31 +06:00
Dmitry Borisov
f15de15554 [ISAPNP] Fixes and improvements for IRP handling
- Implement device removal.
- Finish the Read Port special handling
  introduced in 21514e473f.
- Gracefully handle low memory situations.
- Implement IRQ translator.
- Correctly stub power IRP handling.
- Remove unneeded dispatch routines; implement WMI IRP handling.
- Do not handle requests like WRITE_CONFIG.
- Add a signature member to device extensions to make checks clearer.
2021-06-20 19:24:26 +06:00
Dmitry Borisov
e19595572a [ISAPNP] Implement querying bus information 2021-06-20 19:24:25 +06:00
Dmitry Borisov
8f36dee6ff [ISAPNP] Properly count descriptors
Fixes random pool corruptions
2021-06-20 19:24:25 +06:00
Dmitry Borisov
2d367001bd [ISAPNP] Fix device capabilities
- The bus does not supply an address.
- Read Port ID is always unique.

This reverts commit fc0a0b9f84.
See also commit 21514e473f.

CORE-17034
2021-06-20 19:24:19 +06:00
Dmitry Borisov
21514e473f [ISAPNP] Make Read Data Port PDO unique
This PDO is created only once during start of first FDO.
Other buses will remain in an inactive state until
the first FDO receives a remove request.

CORE-17034
2021-06-20 19:22:32 +06:00
Dmitry Borisov
c92bec609b [ISAPNP] Refactor string handling
- Don't allocate string buffers twice.
2021-06-20 19:22:32 +06:00
Dmitry Borisov
70ba96f164 [ISAPNP] Make the driver pageable 2021-06-20 19:22:31 +06:00
Dmitry Borisov
66c195755c [ISAPNP] Use pool tagging 2021-06-20 19:22:31 +06:00
Dmitry Borisov
8f44930f91 [ISAPNP] Code formatting
- Add SAL2 annotations.
- Use RTL_NUMBER_OF macro in kernel mode.
- Use better function/member names.
- Less hardcoded values.
- Add license information. See commit
  d9face83c6 for details.

No functional changes.
2021-06-20 19:22:31 +06:00
Hervé Poussineau
9df05ba4b6 [ISAPNP] Properly stub IRP_MJ_POWER 2020-07-30 13:24:29 +02:00
Hervé Poussineau
e246b9947e [ISAPNP] Mark read data port as started, even if no ISAPNP card is present
CORE-17056
2020-05-16 23:20:38 +02:00
Mark Jansen
da777baa3d
[ISAPNP] Initialize uninitialized variable
Return value was a suggestion from Thomas,
it still boots for me (tm)
2020-05-16 14:03:04 +02:00
Hervé Poussineau
fc0a0b9f84 [ISAPNP] Mark Read Data Port as not having a unique ID
This fixes a bugcheck in ntoskrnl.exe when computer has multiple ISA buses.

CORE-17034
2020-05-09 16:54:46 +02:00
Hervé Poussineau
7cda1ed2f5 [ISAPNP] Report DMA channels 2020-03-26 16:36:23 +01:00
Hervé Poussineau
eb66324d7c [ISAPNP] Fix reporting of devices with hexadecimal productId 2020-03-26 16:36:22 +01:00
Hervé Poussineau
67141abef1 [ISAPNP] Create requirements and resource lists when detecting a device 2020-03-22 14:29:38 +01:00
Hervé Poussineau
0ca5567894 [ISAPNP] Read all tags when detecting devices, and keep interesting ones
Currently, we only keep device identification, IO ports and IRQs.
2020-03-22 14:29:38 +01:00
Hervé Poussineau
61c1079a18 [ISAPNP] Create resource list ahead of IRP_MN_QUERY_RESOURCES 2020-03-22 14:29:38 +01:00
Hervé Poussineau
debec8c96e [ISAPNP] Create resource requirements ahead of IRP_MN_QUERY_RESOURCE_REQUIREMENTS 2020-03-22 14:29:38 +01:00
Hervé Poussineau
1dcc6f8b94 [ISAPNP] Fix capabilities for devices 2020-03-22 14:29:38 +01:00
Hervé Poussineau
42724f47f8 [ISAPNP] Return a compatibleIDs only if defined 2020-03-22 14:29:38 +01:00
Hervé Poussineau
b905c40d2e [ISAPNP] Fix some indentation 2020-03-22 14:29:38 +01:00
Hervé Poussineau
7b1e28e724 [ISAPNP] Fix some warnings 2020-03-21 08:29:15 +01:00
Hervé Poussineau
2abd853b37 [ISAPNP] Implement some more IRP_MJ_PNP/IRP_MN_* requests
We either succeed them, or we pass them down to the ISAPNP FDO.
2020-03-20 22:40:11 +01:00
Hervé Poussineau
8b53ed1d9b [ISAPNP] Implement IRP_MN_QUERY_PNP_DEVICE_STATE for ReadDataPort 2020-03-20 22:40:11 +01:00
Hervé Poussineau
5b9929a076 [ISAPNP] Detect devices only once ReadDataPort is started
Also let kernel choose the read data port address, by using the resources given in IRP_MN_START_DEVICE.
2020-03-20 22:40:11 +01:00
Hervé Poussineau
5a404e6c50 [ISAPNP] Implement IRP_MN_QUERY_RESOURCES/IRP_MN_QUERY_RESOURCE_REQUIREMENTS for ReadDataPort 2020-03-20 22:40:11 +01:00
Hervé Poussineau
2fe644dc86 [ISAPNP] Report removal relations on ReadDataPort 2020-03-20 22:40:11 +01:00
Hervé Poussineau
c4813f73f5 [ISAPNP] Report a ReadDataPort PDO
This PDO will later request resources required for ISAPNP bus.
2020-03-20 22:40:11 +01:00
Hervé Poussineau
e0607fcebf [ISAPNP] Create PDO identifiers ahead of IRP_MN_QUERY_ID 2020-03-20 22:40:11 +01:00
Hervé Poussineau
89aff07a67 [ISAPNP] Extract function to create DOs 2020-03-20 22:40:11 +01:00
Hervé Poussineau
d0c7bd98c7 [ISAPNP] Fix some return codes 2020-03-20 22:40:11 +01:00