forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Split the implementation-agnostic stuff in separate files. * Make sure that targets using non-default request_irq() pull kernel/irq/devres.o * Introduce new symbols (HAS_IOPORT and HAS_IOMEM) defaulting to positive; allow architectures to turn them off (we needed these symbols anyway for dependencies of quite a few drivers). * protect the ioport-related parts of lib/devres.o with CONFIG_HAS_IOPORT. Signed-off-by: Al Viro <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Al Viro
authored and
Linus Torvalds
committed
Feb 11, 2007
1 parent
2835fdf
commit 5ea8176
Showing
21 changed files
with
442 additions
and
397 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -44,6 +44,9 @@ config IRQ_PER_CPU | |
bool | ||
default y | ||
|
||
config NO_IOPORT | ||
def_bool y | ||
|
||
config CRIS | ||
bool | ||
default y | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -57,6 +57,9 @@ config TIME_LOW_RES | |
bool | ||
default y | ||
|
||
config NO_IOPORT | ||
def_bool y | ||
|
||
config ISA | ||
bool | ||
default y | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -28,6 +28,9 @@ config GENERIC_IRQ_PROBE | |
bool | ||
default y | ||
|
||
config NO_IOPORT | ||
def_bool y | ||
|
||
source "init/Kconfig" | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
|
||
obj-y := handle.o manage.o spurious.o resend.o chip.o | ||
obj-y := handle.o manage.o spurious.o resend.o chip.o devres.o | ||
obj-$(CONFIG_GENERIC_IRQ_PROBE) += autoprobe.o | ||
obj-$(CONFIG_PROC_FS) += proc.o | ||
obj-$(CONFIG_GENERIC_PENDING_IRQ) += migration.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
#include <linux/module.h> | ||
#include <linux/interrupt.h> | ||
|
||
/* | ||
* Device resource management aware IRQ request/free implementation. | ||
*/ | ||
struct irq_devres { | ||
unsigned int irq; | ||
void *dev_id; | ||
}; | ||
|
||
static void devm_irq_release(struct device *dev, void *res) | ||
{ | ||
struct irq_devres *this = res; | ||
|
||
free_irq(this->irq, this->dev_id); | ||
} | ||
|
||
static int devm_irq_match(struct device *dev, void *res, void *data) | ||
{ | ||
struct irq_devres *this = res, *match = data; | ||
|
||
return this->irq == match->irq && this->dev_id == match->dev_id; | ||
} | ||
|
||
/** | ||
* devm_request_irq - allocate an interrupt line for a managed device | ||
* @dev: device to request interrupt for | ||
* @irq: Interrupt line to allocate | ||
* @handler: Function to be called when the IRQ occurs | ||
* @irqflags: Interrupt type flags | ||
* @devname: An ascii name for the claiming device | ||
* @dev_id: A cookie passed back to the handler function | ||
* | ||
* Except for the extra @dev argument, this function takes the | ||
* same arguments and performs the same function as | ||
* request_irq(). IRQs requested with this function will be | ||
* automatically freed on driver detach. | ||
* | ||
* If an IRQ allocated with this function needs to be freed | ||
* separately, dev_free_irq() must be used. | ||
*/ | ||
int devm_request_irq(struct device *dev, unsigned int irq, | ||
irq_handler_t handler, unsigned long irqflags, | ||
const char *devname, void *dev_id) | ||
{ | ||
struct irq_devres *dr; | ||
int rc; | ||
|
||
dr = devres_alloc(devm_irq_release, sizeof(struct irq_devres), | ||
GFP_KERNEL); | ||
if (!dr) | ||
return -ENOMEM; | ||
|
||
rc = request_irq(irq, handler, irqflags, devname, dev_id); | ||
if (rc) { | ||
kfree(dr); | ||
return rc; | ||
} | ||
|
||
dr->irq = irq; | ||
dr->dev_id = dev_id; | ||
devres_add(dev, dr); | ||
|
||
return 0; | ||
} | ||
EXPORT_SYMBOL(devm_request_irq); | ||
|
||
/** | ||
* devm_free_irq - free an interrupt | ||
* @dev: device to free interrupt for | ||
* @irq: Interrupt line to free | ||
* @dev_id: Device identity to free | ||
* | ||
* Except for the extra @dev argument, this function takes the | ||
* same arguments and performs the same function as free_irq(). | ||
* This function instead of free_irq() should be used to manually | ||
* free IRQs allocated with dev_request_irq(). | ||
*/ | ||
void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id) | ||
{ | ||
struct irq_devres match_data = { irq, dev_id }; | ||
|
||
free_irq(irq, dev_id); | ||
WARN_ON(devres_destroy(dev, devm_irq_release, devm_irq_match, | ||
&match_data)); | ||
} | ||
EXPORT_SYMBOL(devm_free_irq); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.