diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-08-03 09:42:25 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-08-05 07:00:36 +0200 |
commit | 1b42158588a90de815666f5924744d260cec70d7 (patch) | |
tree | 3631f66d68b49a4611ff5ac55cf6494c9deac780 /bsps/arm/atsam/spi/sc16is752.c | |
parent | smpschededf02: Document reset() function (diff) | |
download | rtems-1b42158588a90de815666f5924744d260cec70d7.tar.bz2 |
arm/atsam: Make interrupt server configurable
The external UART over SPI device SC16IS752 uses the interrupt server
for interrupt processing. The interrupt server is also heavily used by
libbsd. The interrupt processing for the SC16IS752 is time critical and
doesn't work if network traffic is processed at the same priority.
With #4033 custom interrupt servers are available. Change
atsam_sc16is752_spi_create() to support user-defined interrupt servers.
Introduced atsam_sc16is752_spi_config to cut down the argument count of
this function.
Close #4039.
Diffstat (limited to 'bsps/arm/atsam/spi/sc16is752.c')
-rw-r--r-- | bsps/arm/atsam/spi/sc16is752.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/bsps/arm/atsam/spi/sc16is752.c b/bsps/arm/atsam/spi/sc16is752.c index 8d38fe92d6..59380d5057 100644 --- a/bsps/arm/atsam/spi/sc16is752.c +++ b/bsps/arm/atsam/spi/sc16is752.c @@ -41,7 +41,7 @@ static bool atsam_sc16is752_install_interrupt(sc16is752_context *base) rtems_status_code sc; uint8_t rv; - sc = rtems_interrupt_server_entry_initialize(RTEMS_INTERRUPT_SERVER_DEFAULT, + sc = rtems_interrupt_server_entry_initialize(ctx->irqs_index, &ctx->irqs_entry); rtems_interrupt_server_action_prepend(&ctx->irqs_entry, &ctx->irqs_action, atsam_sc16i752_irqs_handler, ctx); @@ -64,24 +64,19 @@ static void atsam_sc16is752_remove_interrupt(sc16is752_context *base) } int atsam_sc16is752_spi_create( - atsam_sc16is752_spi_context *ctx, - const char *device_path, - sc16is752_mode mode, - uint32_t input_frequency, - const char *spi_path, - uint8_t spi_chip_select, - uint32_t spi_speed_hz, - const Pin *irq_pin + atsam_sc16is752_spi_context *ctx, + const atsam_sc16is752_spi_config *config ) { - ctx->base.base.mode = mode; - ctx->base.base.input_frequency = input_frequency; + ctx->base.base.mode = config->mode; + ctx->base.base.input_frequency = config->input_frequency; ctx->base.base.install_irq = atsam_sc16is752_install_interrupt; ctx->base.base.remove_irq = atsam_sc16is752_remove_interrupt; - ctx->base.spi_path = spi_path; - ctx->base.cs = spi_chip_select; - ctx->base.speed_hz = spi_speed_hz; - ctx->irq_pin = *irq_pin; + ctx->base.spi_path = config->spi_path; + ctx->base.cs = config->spi_chip_select; + ctx->base.speed_hz = config->spi_speed_hz; + ctx->irq_pin = config->irq_pin; + ctx->irqs_index = config->server_index; - return sc16is752_spi_create(&ctx->base, device_path); + return sc16is752_spi_create(&ctx->base, config->device_path); } |